【发布时间】:2019-08-29 14:05:09
【问题描述】:
我们最近从 Windows Server 2008 切换到 2016,我们每天都有一些任务要根据批处理删除文件和文件夹。
代码如下:
set successful="D:\TEST\logs\successful.log"
set failed="D:\TEST\logs\failed.log"
set delpath="D:\TEST\1 und 2"
echo Logged time = %time% %date% >> %successful%
echo Logged time = %time% %date% >> %failed%
echo Files deleted: >> %successful%
echo Files failed to delete: >> %failed%
forfiles -p %delpath% -m *.* -c "cmd /c del /q @path && echo @path>>%successful% || echo @path>>%failed%"
forfiles -p %delpath% -c "cmd /c IF @isdir == TRUE rd /S /Q @path && echo @path>>%successful% || echo @path>>%failed%"
echo. >> %successful%
echo. >> %failed%
自服务器 2016 以来,此批次不工作。 路径中的空格存在一些问题。
输出是:
ERROR: Invalid argument/option - 'und'.
Type "FORFILES /?" for usage.
路径的语法会发生一些变化吗?我错过了引号吗?
【问题讨论】:
-
您是否考虑在
%delpath%周围加上双引号? -
刚试过。没有变化。
-
您为什么使用
ForFiles而不是For循环?如果您想继续使用ForFiles,您确实需要使用适当转义的双引号和/或使用其十六进制序列替换特殊字符。命令的帮助,Forfiles /?,应该提供一些信息来帮助你。 -
如果您从命令行手动运行相同的命令会发生什么?
-
在设置环境变量值时不要使用引号字符。使用变量时使用引号字符。请参阅@Compo 的回答。
标签: batch-file cmd windows-server