Batch file .bat文件中的特殊字符

Batch file .bat文件中的特殊字符,batch-file,automation,Batch File,Automation,每天我都会从公司的目录中获取文件,我正在自动化这个。。。但是目录名包含一个特殊字符“&”,我组装的脚本无法识别 @Echo Off Set _Source=C:\Users\Rafae\Desktop\test&test Set _Dest=C:\Users\Rafae\Desktop\study Forfiles /D +0 /P %_Source% /C "cmd /c XCopy %_Dest%" pause 错误: “test”未被识别为内部命令 或外部,一

每天我都会从公司的目录中获取文件,我正在自动化这个。。。但是目录名包含一个特殊字符“&”,我组装的脚本无法识别

@Echo Off
Set _Source=C:\Users\Rafae\Desktop\test&test
Set _Dest=C:\Users\Rafae\Desktop\study
Forfiles /D +0 /P %_Source% /C "cmd /c XCopy %_Dest%"
pause
错误: “test”未被识别为内部命令 或外部,一个可操作的程序或批处理文件。 错误:指定的目录不存在。 按任意键继续


有没有办法让cmd识别名称中包含“&”的文件夹?

您需要转义
&
字符,因为它有特殊的含义

您可以使用插入符号对其进行转义,如
Set\u Source=C:\Users\Rafae\Desktop\test^&test

或者引用

Set "_Source=C:\Users\Rafae\Desktop\test&test"
在本例中,我使用扩展集语法,在变量名之前加上引号,这将转义字符串,但不会将引号添加到变量中

如果使用这样的变量,则应始终引用结果,如

Forfiles /D +0 /P "%_Source%" ...

打开,运行
cmd/?
,从第一页的顶部到最后一页的底部,仔细、完整地阅读Windows命令处理器的输出用法帮助。当文件名或任何其他参数字符串必须包含在
获取对
cmd.exe具有特殊意义的字符
解释为文字字符,但
%
除外!”启用延迟扩展。另请参阅和上一篇解释如果不在双引号参数字符串中如何解释
&
。我建议使用第二行
集“\u Source=C:\Users\Rafae\Desktop\test&test”
和第三行
集“\u Dest=C:\Users\Rafae\Dest\study”
并作为第四行
%SystemRoot%\System32\forfiles.exe/P“%\u Source%”/C”%SystemRoot%\System32\xcopy.exe@path\“%\u Dest%\\”
。但我真的不明白为什么您使用不推荐的
文件
xcopy
而不是
%SystemRoot%\System32\robocy.exe
,这将使文件复制任务更容易编码,执行效率更高。在命令提示窗口中运行
robocopy/?
,以获取有关此命令的帮助。谢谢,我将其放在引号中,它成功了。