このコードを使用して、ある場所から別の場所にファイルをコピーしたいとします。
@set FILE=%1
@set SCRDIR=C:\test dir
@set DSTDIR=%SCRDIR%\temp
for %%f in ("%SCRDIR%\%FILE%") do @(
echo Copying "%%f" to "%DSTDIR%"
copy "%%f" "%DSTDIR%"
)
ファイルが存在します:
C:\test dir>dir /b copyme.txt
copyme.txt
まず、コピーしたい引数としてファイルの名前を使用してスクリプトを呼び出します。
C:\test dir>test.bat rename.txt
C:\test dir>for %f in ("C:\test dir\rename.txt") do @(
echo Copying "%f" to "C:\test dir\temp"
copy "%f" "C:\test dir\temp"
)
Copying ""C:\test dir\rename.txt"" to "C:\test dir\temp"
The system cannot find the file specified..
上記のコピーコマンドは、余分な引用符が原因で失敗します...
ここで、ワイルドカードを含むファイル名でスクリプトを呼び出します*
。
C:\test dir>test.bat copyme.*
C:\test dir>for %f in ("C:\test dir\copyme.*") do (
echo Copying "%f" to "C:\test dir\temp"
copy "%f" "C:\test dir\temp"
)
C:\test dir>(
echo Copying "C:\test dir\copyme.txt" to "C:\test dir\temp"
copy "C:\test dir\copyme.txt" "C:\test dir\temp"
)
Copying "C:\test dir\copyme.txt" to "C:\test dir\temp"
1 file(s) copied.
上記の例では、ワイルドカードを使用している場合、完全に正常に機能します。
誰かがこの行動を説明できますか?ワイルドカードを使用していないのに、Windowsが余分な引用符を追加するのはなぜですか?または、ワイルドカードを使用しているため、余分な引用符を省略していますか?FOR
空白を含むパスを処理するには、ループのpath \ filenameを引用符で囲む必要があるため、これらを省略することはできません。