Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows ForFiles不适用于具有动态文件夹名称的递归文件夹_Windows_Loops_Batch File_Dynamic_Special Folders - Fatal编程技术网

Windows ForFiles不适用于具有动态文件夹名称的递归文件夹

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\)

我想使用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\) 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
循环可能存在问题。