批处理路径变量在 Windows Server 2016 中不起作用



我们最近从Windows Server 2008切换到2016,我们每天都有一些任务可以基于批处理删除文件和文件夹。

这是代码:

set successful="D:TESTlogssuccessful.log"
set failed="D:TESTlogsfailed.log"
set delpath="D:TEST1 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.

路径的语法可能会有一些变化吗?我错过了引号吗?

这是一个我理解的相同任务的快速示例(清空"D:TEST1 und 2"并记录失败和成功的操作);但使用For循环而不是ForFiles命令。请随时尝试一下,并在必要时报告。

@Echo Off
Set "successful=D:TESTlogssuccessful.log"
Set "failed=D:TESTlogsfailed.log"
Set "delpath=D:TEST1 und 2"
(Echo Logged time = %TIME% %DATE%&Echo Files deleted:)>>"%successful%"
(Echo Logged time = %TIME% %DATE%&Echo Files failed to delete:)>>"%failed%"
For /D %%A In ("%delpath%*")Do RD /S/Q "%%A" 2>Nul&&(>>"%successful%" Echo %%A)||>>"%failed%" Echo %%A
For %%A In ("%delpath%*")Do Del "%%A" 2>Nul&&(>>"%successful%" Echo %%A)||>>"%failed%" Echo %%A
Echo(>>"%successful%"
Echo(>>"%failed%"

这个问题与目录本身的名称无关,而与目录是否为空的事实有关,正如您在下面的实验中看到的那样(我开始在目录中添加一个空文件"blabla.txt",之后我删除了它):

Prompt>forfiles /P "C:1 und 2" /C "cmd /c echo @path"
"C:1 und 2blabla.txt"
Prompt>del "1 und 2blabla.txt"
Prompt>forfiles /P "C:1 und 2" /C "cmd /c echo @path"
ERROR: The system cannot find the file specified.

最新更新