批处理路径变量在 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%"
我们最近从 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%"