web-dev-qa-db-ja.com

バッチファイル、フォルダパス内のワイルドカード、ワイルドカードが何であるかわからない

のファイルを置き換えようとするバッチファイルがあります

C:\Users\All Users\Symantec\Symantec Endpoint Protection\12.*\Data\Config

しかし、*はコンピューターごとに異なるため、入力リストを作成できるわけではありません。

このバッチファイルは、コマンドラインから呼び出される別のバッチファイルで実行されます。

これが*パスのバッチファイルですC:\ script.bat

@echo off
if exist "C:\Users\All Users\Symantec\Symantec Endpoint Protection\12.*\Data\Config\SyLink.xm_" del /Q "C:\Users\All Users\Symantec\Symantec Endpoint Protection\12.*\Data\Config\SyLink.xm_"
ren "C:\Users\All Users\Symantec\Symantec Endpoint Protection\12.*\Data\Config\SyLink.xml" sylink.xm_bak
del /Q "C:\Users\All Users\Symantec\Symantec Endpoint Protection\12.*\Data\Config\SyLink.xml"

echo.
echo Copying new SyLink.xml
echo.
copy C:\SyLink.xml "C:\Users\All Users\Symantec\Symantec Endpoint Protection\12.*\Data\Config"


echo.
echo Deleting temp files
del /Q "c:\SyLink.xml"

そして、これは別のバッチファイルですC:\ copy.bat最初のバッチファイル、つまりC:\ script.batを呼び出します

xcopy C:\sylink.xml \\10.10.10.10\c$
xcopy C:\sylink.xml \\10.10.10.11\c$
D:\pstools\psexec.exe @C:\clients.txt -c C:\Script.bat

C:\ clients.txt

10.10.10.10
10.10.10.11

バッチファイルはコマンドラインから実行されます

C:\> C:\copy.bat

質問は、このバッチファイルを機能させて*をワイルドカードとして認識するにはどうすればよいですか?

ありがとう

7
Glowie
for /d %%a in (
  "C:\Users\All Users\Symantec\Symantec Endpoint Protection\12.*"
) do set "theFolder=%%~fa\Data\Config"

echo %theFolder%

パスの最後の要素にのみワイルドカードを含めることができます。

必要なことを行うには、12.*フォルダーを列挙して1つを選択する必要があります。この場合、ワイルドカードに一致する最後のフォルダーが選択されます(do句のコードが実行されると、変数が上書きされます)

6
MC ND

これを試して:

@echo off

For /D %%D in ("C:\Users\All Users\Symantec\Symantec Endpoint Protection\12.*") Do (
    Set "Dir=%%~fD\Data\Config"
)

If exist "%Dir%\SyLink.xm_" Del /q %Dir%\SyLink.xm_"
Ren "%Dir%\SyLink.xml" sylink.xm_bak
Del /q "%Dir%\SyLink.xml"

echo.
echo Copying new SyLink.xml
echo.
copy C:\SyLink.xml "%Dir%"


echo.
echo Deleting temp files
Del /q "c:\SyLink.xml"

/ Dフォルダの検索を切り替えます。

%% 〜fDフォルダからフルパスを取得します。

4
Honguito98