我们最近从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.
路径的语法可能会有一些变化吗?我错过了引号吗?
这是我理解为同一任务的一个快速示例,(清空"D:\TEST\1 und 2"
并记录失败和成功的操作);但使用For
循环而不是ForFiles
命令。如有需要,请随时尝试并报告。
@Echo Off
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%&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 2\blabla.txt"
Prompt>del "1 und 2\blabla.txt"
Prompt>forfiles /P "C:\1 und 2" /C "cmd /c echo @path"
ERROR: The system cannot find the file specified.