次のファイルを含むディレクトリがあるとします。
Test.bat Test_a.txt Test_b.txt Test_v1.zip Test_v2.zip Test_v3.zip
Test_v*.zip
すべてを静かに削除したい(画面にエラー メッセージが記録されない)。次のスクリプトでこれを実現できます。
@ECHO OFF
SET OLD_ZIPS=^
C:\Tmp\Test_v*.txt;^
C:\Tmp\Test_a.txt
ECHO Deleting the following files: %OLD_ZIPS%
FOR %%Y IN (%OLD_ZIPS%) DO (
IF EXIST %%Y (
ECHO Deleting %%Y
DEL /Q %%Y)
)
PAUSE
これはうまくいきます:
Deleting the following files: C:\Tmp\Test_v*.txt;C:\Tmp\Test_a.txt
Deleting "C:\Tmp\Test_v1.txt"
Deleting "C:\Tmp\Test_v2.txt"
Deleting "C:\Tmp\Test_a.txt"
Press any key to continue . . .
もちろん、ファイルパスにスペースが含まれていない限り。したがって、上記の例で、次のように変更C:\Tmp\Test_v*.txt
すると、次のようC:\Tmp with spaces\Test_v*.txt
になります。
Deleting the following files: C:\Tmp test\Test_v*.txt;C:\Tmp test\Test_a.txt
Press any key to continue . . .
どうすればスペースでボーキングするのを止めることができますか?
編集- Alex K's answer (およびもう少しデバッグ) に従ってスペースを試してみましたが、おそらく for ループが期待どおりに分割されていないようです:
@ECHO OFF
SET OLD_ZIPS=^
C:\Tmp test\Test_v*.txt;^
C:\Tmp test\Test_a.txt
ECHO Deleting the following files: %OLD_ZIPS%
FOR %%Y IN (%OLD_ZIPS%) DO (
ECHO Checking existance of "%%Y"
IF EXIST "%%Y" (
ECHO Deleting "%%Y"
DEL /Q "%%Y")
)
PAUSE
..私に与えます:
Deleting the following files: C:\Tmp test\Test_v*.txt;C:\Tmp test\Test_a.txt
Checking existance of "C:\Tmp"
Checking existance of "C:\Tmp"
Checking existance of "test\Test_a.txt"