【问题标题】:ForFiles not working for recursive folder with dynamic folder nameForFiles 不适用于具有动态文件夹名称的递归文件夹
【发布时间】:2024-01-11 08:23:01
【问题描述】:

我想使用 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

我不知道哪里出错了。有没有其他方法可以实现这一目标? 任何帮助将不胜感激。

【问题讨论】:

  • ? 不是批量通配符。
  • @SomethingDark 为什么不呢?
  • @ths 什么,为什么? 不是批量通配符?因为微软的人决定将* 设为通配符。您必须向他们询问更多详细信息。
  • 这不是真的。一种 ?是单个字符的通配符。
  • 看看那个;就是这样。不过,您不能保证文件夹中会有五个可以是通配符的字符,所以使用* 还是更好。

标签: windows loops batch-file dynamic special-folders


【解决方案1】:

Windows 命令仅支持路径终端节点中的通配符 - 它不会找到出现在最后一个 \ 之前任何位置的路径。

您的问题的解决方案非常简单 :-) 只需删除最后的 \

for /d %X in (e:\local\test\backups\s?????pbx) do forfiles /p %X /m *.cab /c "cmd /c del @path" /d -92

【讨论】:

    【解决方案2】:

    Batch 使用* 作为通配符。试试这个:

    for /d %X in (e:\local\test\backups\s*pbx\) do forfiles /p %X /m *.cab /c "cmd /c del @path" /d -92
    

    【讨论】:

    • 我可以看到应该发生的事情,但实际发生了什么?
    • 假设从目录 e:\local\test\backups 中删除超过 92 天的文件,其中包含子文件夹“s*pbx”。但我什至没有看到 echo 命令而不是 delete 命令工作
    • 只是为了确定,您是在命令行上运行它而不是通过批处理脚本,对吧?因为如果这是在脚本中,则需要使用%%X 而不是%X
    • 尝试运行for /D %X in (E:\local\test\backups\s*pbx\) do echo %X 看看是否有任何问题。外部 for 循环可能存在问题。