【问题标题】:Batch path variable does not work in Windows Server 2016批处理路径变量在 Windows Server 2016 中不起作用
【发布时间】:2019-08-29 14:05:09
【问题描述】:

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

路径的语法会发生一些变化吗?我错过了引号吗?

【问题讨论】:

  • 您是否考虑在%delpath% 周围加上双引号?
  • 刚试过。没有变化。
  • 您为什么使用ForFiles 而不是For 循环?如果您想继续使用ForFiles,您确实需要使用适当转义的双引号和/或使用其十六进制序列替换特殊字符。命令的帮助,Forfiles /?,应该提供一些信息来帮助你。
  • 如果您从命令行手动运行相同的命令会发生什么?
  • 在设置环境变量值时不要使用引号字符。使用变量时使用引号字符。请参阅@Compo 的回答。

标签: batch-file cmd windows-server


【解决方案1】:

问题与目录本身的名称无关,而更多的是目录是否为空,正如您在以下实验中看到的那样(我开始在其中添加一个空文件“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.

【讨论】:

  • 这是一个完全不同的错误,与 OP 报告的内容无关
【解决方案2】:

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

【讨论】:

  • 提前致谢。明天试试,给你答复。
猜你喜欢
  • 1970-01-01
  • 2015-11-29
  • 1970-01-01
  • 2011-07-07
  • 1970-01-01
  • 2014-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多