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

Batch path variable does not work in Windows Server 2016

我们最近从 Windows Server 2008 切换到 2016,我们有一些任务是每天根据批次删除文件和文件夹。

代码如下:

set successful="D:\TEST\logs\successful.log"
set failed="D:\TEST\logs\failed.log"
set delpath="D:\TEST 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.

路径的语法是否有一些变化?我错过引号了吗?

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

Prompt>forfiles /P "C: und 2" /C "cmd /c echo @path"

"C: und 2\blabla.txt"

Prompt>del "1 und 2\blabla.txt"

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

这是我所理解的相同任务的简单示例,(清空 "D:\TEST und 2" 并记录失败和成功的操作);但使用 For 循环而不是 ForFiles 命令。请随时尝试并在必要时反馈。

@Echo Off
Set "successful=D:\TEST\logs\successful.log"
Set "failed=D:\TEST\logs\failed.log"
Set "delpath=D:\TEST 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%"