【发布时间】:2019-07-26 19:12:37
【问题描述】:
我知道如何在 forfiles 命令中使用搜索掩码来定位特定扩展名的文件,但我正在处理一个我想避免特定扩展名并捕获其他所有内容的情况。
有没有一种简单的方法可以通过 forfiles 命令实现这一点,还是我需要编写一个自定义的 for 循环来处理这个过程?我不想运行像下面这样的命令,这会迫使我事先定义我的搜索掩码。
for %G in (.txt, .edi, .csv) do forfiles -p "C:abc\del" -s -m *%G -d -10 -c "cmd /c echo @path"
我的用例是基于单个扩展名递归地从目录中删除所有未加密的文件。这将是我的负值。
【问题讨论】:
-
为什么不能随便用,
... "cmd /c if not @ext == "yourext" echo @path"!或使用For /F "Delims=" %G In ('Dir /A-D^|FindStr /VE "your extensionlist"')Do... -
啊,我没想到...我想我总是可以在所有情况下抓住一切,然后在事后过滤(就像你的第一个例子)。
-
@Compo 该解决方案对我来说已经足够了。您介意将其创建为答案并将其关闭吗?
-
请记住,对于在
for循环中找到的每个文件,都会打开一个新的 cmd.exe 实例。在for括号中过滤会更有效,然后在do命令中,然后在forfiles... 创建答案,只是为了将标准for更改为for /f,或一个简单的if not命令几乎不需要努力。 -
我说过,当您回答我所问的关于如何应用否定案例来过滤来自 forfiles 本身的内容的问题时...使用 cmd /c 事后应用过滤器是一种合乎逻辑的方法这解决了这个问题。这是一个你觉得不需要问的问题吗?
标签: batch-file forfiles