我一直在谷歌搜索一个答案,虽然这里有几个讨论问题的线程,但提供的答案似乎都没有。
我有以下循环将目录从一个驱动器复制到另一个驱动器:
for /F "tokens=2 delims==" %%z in ('set dirs[') do (
xcopy "%%z\*.*" "!outdrive!:\!dir!\%%~nxz" /C /S /D /Y /I
)
“dirs”是一个数组,包含表示目录的几个(未知数量)字符串。例如,一个元素可能是C:\ Users \ owner \ Documents,另一个元素可能是C:\ Users \ owner \ Pictures \ foo bar \ Trip。 “Outdrive”是xcopy将文件复制到的磁盘,“dir”只是在此之前使用名为“backup xx-xx-xxxx”的md创建的文件夹,其中x组成当前日期。无论如何,当我运行程序时,我收到一条错误,上面写着“参数数量无效”。我可以看到,如果我的目录周围没有引号,会导致这种情况,如C:\ Users \ owner \ Pictures \ foo bar \之类的目录,Trip在其中一个文件夹名称中有空格。但是,由于我确实有每个参数的引号,我不确定是什么导致了这个问题。我希望有人可以对此有所了解。
批处理文件是Windows .bat 操作系统是Windows 8 x64 延迟扩展已启用,因此为“!”,但我认为我甚至不需要延迟扩展此循环。
修改 在更改了XCOPY命令以回显并确切地看到字符串的样子之后,我注意到“dir”在它周围有引号,所以它将它视为另一个参数。我添加了一行:
set dir=!dir:"=!
它有效。很抱歉问这么愚蠢的问题,我不确定我早些时候错过了什么。