Windows ForFiles不适用于具有动态文件夹名称的递归文件夹
我想使用forfiles删除92天以前的文件,但代码似乎正在崩溃。 我有一个动态文件夹名Windows ForFiles不适用于具有动态文件夹名称的递归文件夹,windows,loops,batch-file,dynamic,special-folders,Windows,Loops,Batch File,Dynamic,Special Folders,我想使用forfiles删除92天以前的文件,但代码似乎正在崩溃。 我有一个动态文件夹名 for /d %X in (e:\local\test\backups\s?????pbx\) do forfiles /p %X /m *.cab /c "cmd /c del @path" /d -92 我想不出哪里出了问题。有没有其他方法可以做到这一点? 任何帮助都将不胜感激。批处理使用*作为通配符。试试这个: for /d %X in (e:\local\test\backups\s*pbx\)
for /d %X in (e:\local\test\backups\s?????pbx\) do forfiles /p %X /m *.cab /c "cmd /c del @path" /d -92
我想不出哪里出了问题。有没有其他方法可以做到这一点?
任何帮助都将不胜感激。批处理使用
*
作为通配符。试试这个:
for /d %X in (e:\local\test\backups\s*pbx\) do forfiles /p %X /m *.cab /c "cmd /c del @path" /d -92
Windows命令仅支持路径的终端节点中的通配符-它将找不到出现在最后一个
\
之前的任何位置的路径
您的问题的解决方案非常简单:-)只需删除最后的\
for /d %X in (e:\local\test\backups\s?????pbx) do forfiles /p %X /m *.cab /c "cmd /c del @path" /d -92
?
不是批处理中的通配符。@SomethingDark为什么不呢?@ths什么,?
为什么不是批处理中的通配符?因为微软的人决定把*
作为通配符。你得问他们更多的细节,但事实并非如此。A.是单个字符的通配符;的确如此。不过,您不能保证文件夹中有五个可以是通配符的字符,因此使用*
更好。我可以看到应该发生什么,但实际发生了什么?应该从目录e:\local\test\backups(具有子文件夹“s*pbx”)中删除92天以上的文件。但是我甚至看不到echo命令代替delete命令工作只是为了确保,您是在命令行上运行这个命令,而不是通过批处理脚本,对吗?因为如果这是在脚本中,则需要使用%%X
而不是%X
。请尝试在(E:\local\test\backups\s*pbx\)中为/D%X运行,执行echo%X
,然后查看是否出现任何问题。外部for
循环可能存在问题。