批量使用 FORFILES 删除超过一周的 tmp 和 bak 文件

批量使用 FORFILES 删除超过一周的 tmp 和 bak 文件

我在使此语法正常工作时遇到问题。我想要做的是,如果修改日期超过 7 天,则从指定目录和所有子目录中删除所有 tmp 和 bak 文件。

for %G in (.tmp, .bak) do forfiles -p "C:\test\cad projects" -s -m *%G -d -7 -c "cmd /c del @path"

我的语法来自这个 StackOverflow 问题

如果我将搜索掩码更改为仅包含一个所需的扩展名,那么我就会得到正确的结果。

forfiles -p "c:\test\cad projects" -s -m *.bak -d -7 -c "cmd /c del @path"

我不太会处理批处理文件,所以我希望有人能帮我。谢谢阅读。

答案1

如果你从控制台运行它,它应该可以工作。如果你将它保存到。蝙蝠文件,那么变量的格式会有所不同。您必须使用两个百分号来表示变量。因此,您的命令将变成...

for %%G in (.tmp, .bak) do forfiles -p "C:\test\cad projects" -s -m *%%G -d -7 -c "cmd /c del @path"

微软的KB75634文章解释了为什么会这样。

如果两个百分号之间没有字符,则一个百分号会被删除,另一个会保留。这就是为什么回显每个带有 .COM 扩展名的文件的名称的 FOR 命令会

FOR %V IN (*.COM) DO ECHO %V

但如果将相同的命令放在批处理文件中,则需要执行以下操作:

FOR %%V IN (*.COM) DO ECHO %%V

答案2

好吧,我没有仔细阅读 FOR /R 语法。我漏了一个 %。上面的代码在命令行上可以运行。但是从批处理中,它却因为缺少 % 而失败了。

for %%G in (.tmp, .bak) do forfiles -p "C:\test\cad projects" -s -m
*%%G -d -7 -c "cmd /c del @path"

相关内容