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

问题描述 投票:0回答:2

我们最近从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.

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

batch-file cmd windows-server
2个回答
0
投票

这是我理解为同一任务的一个快速示例,(清空"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%"

0
投票

这个问题与目录本身的名称无关,但更多的是如果目录是空的,可以在下面的实验中看到(我开始在目录中添加一个空文件“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.
© www.soinside.com 2019 - 2024. All rights reserved.