1

我知道如何在 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"

我的用例是基于单个扩展名递归地从目录中删除所有未加密的文件。这将是我的负值。

4

2 回答 2

1

如果文件名不是以 PDF 结尾,此批处理文件脚本命令将删除 30 天之前的所有内容。forfiles它在 Windows 7 cmd shell 中使用 2003 版本。

forfiles不能使用 reg exps,它只处理简单的掩码通配符。这效率低下,但对于少量文件来说还可以。

for /f "delims=" %%X in ('dir /b %DIRNAME% ^|grep -vi pdf$') do forfiles /p %DIRNAME% /m "%%X" /d %DAYNUM% /c "cmd /c del @FILE" ```
于 2020-01-03T21:56:17.360 回答
0

根据@Compo对我的问题的评论,将否定搜索掩码应用于 forfiles 命令的一种方法是在事实之后向 cmd 实现添加一个过滤器,如下所示:

forfiles /P %localDir% /S /M *.* /C "cmd /c if not @EXT == %ignoredExtension% echo @PATH

但是,@Compo 提出了一个有效的担忧,即此实现会导致为找到的每个文件打开一个新的 cmd.exe 实例。在文件计数固定或已知为常数的情况下,这可能是一种不错的方法,但更有效的可扩展替代方法是手动创建一个 for 循环,在制作之前将此过滤器应用于 for 循环实例对 do 操作的调用如下:

For /F "Delims=" %%G In ('dir /A-D^|FindStr /VE %ignoredExtensions%')Do @echo %%G

于 2019-07-26T21:31:10.800 回答