我正在研究一个批处理脚本,它允许我使用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删除超过7天的文件.这些文件位于UNC路径中.下面是我正在使用的脚本.
Forfiles -p \\devexpress\C$\FULL\ -s -m *.* -d -7 -c "cmd /c del /q @path"
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误,提到不支持UNC路径(\ machine\share).
似乎有可用的解决方法,但无法得到一个明确的答案谷歌搜索.
我可以按预期运行forfiles
命令
cmd /c
C:\>forfiles /c "cmd /c ping /a" IP address must be specified.
但是,如果我删除它cmd /c
,它不再识别任何参数,只有基本命令
C:\>forfiles /c "ping /a" Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count] [[-j host-list] | [-k host-list]] [-w timeout] [-R] [-S srcaddr] [-4] [-6] target_name
我必须使用cmd /c
,即使PATH上有外部命令吗?
我正在运行一个批处理文件,其中有一个 forfiles 命令
FORFILES -p%spinputarchrootpath% -m*.csv -d-365 -c"CMD /C DEL @FILE"
%spinputarchrootpath% variable maps to a folder location (Y:\Temp Documents\testfolder).
Run Code Online (Sandbox Code Playgroud)
现在,由于文件夹名称(临时文档)中的空格,上述命令引发错误。
如何处理这个空间?我试过在%spinputarchrootpath%
变量周围加上引号,但它不起作用。
这段代码
forfiles /P %pathname% /M *.log /c "cmd /c echo @file"
Run Code Online (Sandbox Code Playgroud)
会很高兴地列出一堆文件。
我们可以替换ECHO
withRENAME
或MOVE
或许多其他内部命令的组合:例外是CALL
标签名称的 a 。
例如将ECHO
上面的替换如下:
forfiles /P %pathname% /M *.log /c "cmd /c CALL :listit @file"
: :
: :
exit /b
:listit
echo %1
exit /b
Run Code Online (Sandbox Code Playgroud)
我希望有相同的输出会给出错误消息,通常
Invalid attempt to call batch label outside of batch script.
Run Code Online (Sandbox Code Playgroud)
这种行为不是 Microsoft 的文档所评论的,而且由于替代方案已经足够了,我并没有打算让它发挥作用。
不过我有兴趣嘛,为什么不呢?!,所以我提出这个问题
为什么我们不能在 FORFILES 脚本中使用 CALL :label 命令?
谢谢你。