假设我想使用以下代码将文件从一个位置复制到另一个位置:
@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
循环的路径\文件名,因此省略这些不是一个选项。