Forfiles批处理脚本(转义@字符)

Par*_*dox 18 batch-file forfiles

我正在研究一个批处理脚本,它允许我使用forfiles删除早于设定期间的文件.目前,我的目标是打印将被删除的文件.

我正在使用的forfiles调用从cmd.exe shell中完美运行,但是只要我将它嵌入到批处理脚本中,就会barfs.我怀疑这是因为@字符未被正确转义,但我不确定.

我正在运行的命令是:

forfiles /S /P "r:\" /m *.bak /d -10 /c "cmd /c echo @PATH"
Run Code Online (Sandbox Code Playgroud)

并导致以下错误:

ERROR: Invalid argument/option - '@PATH'
Type "FORFILES /?" for usage.
Run Code Online (Sandbox Code Playgroud)

我已经搜索了整个地方并尝试了一些不同的方案来转义@PATH组件.从@@ PATH\"@ PATH \"的所有内容都没有结果.

任何帮助,将不胜感激!

我还应该注意到,我从这里开始了很多关于forfiles的知识.

小智 40

在我删除目录路径周围的引号之前,我遇到了同样的问题,如下所示:

forfiles /S /P r:\ /m *.bak /d -10 /c "cmd /c echo @PATH"
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.

  • 谢谢,但是这很愚蠢。为什么在2012年必须将路径转换为DOS`f:\ MySQLB〜1 \`格式?大声笑。但是至少现在可以了! (2认同)

小智 20

尝试微调尾随\从您的/P路径.然后,您应该能够使用引号来封装包含空格的路径.

  • 我也是!不要错过这个 (2认同)

hbC*_*ber 6

这是一个老问题,但我有一个不同的答案......以防万一有人需要它。

使用“forfiles”时,路径(写在 /p 之后)可以位于引号之间。但是,它不能以斜杠结尾。

如果您想对驱动器的根目录运行“forfiles”:
forfiles /p "C:" /c "cmd /c echo @file"

如果您想处理不同目录中的文件...
forfiles /p "C:\Program Files" /c "cmd /c echo @file"

换句话说,最安全的做法是:

  • 始终使用引号(因为带有空格的文件夹,如“Program Files”,仍然有效)
  • 始终省略最后一个斜杠

forfiles /p "C:\Path\Without\Trailing\Slash"