您可以使用包含此批处理文件(或多或少)只是一个命令行。在命令提示符窗口中运行此批处理文件,并且当前目录是要删除不需要的文件并验证输出的目录树的根目录。然后删除ECHO并再次运行该批处理文件。
命令DIR在当前目录由于/S
搜索和仅用于通配符模式*
与由于/B
这意味着输出裸格式输出匹配由于/A-D
(未目录属性)文件的所有子目录仅仅包含所有找到的具有完整路径的文件的名称。
DIR输出错误信息处理STDERR如果找不到任何文件。此错误消息是由它与2>nul
重定向到设备NUL抑制。重定向操作>
必须在这里与插入符号^
转义首先被解释为文字字符的解析由Windows命令解释器FOR命令行。
DIR的输出来处理STDOUT通过管道与|
标准控制台应用程序FINDSTR其搜索在所有行的情况下不敏感,因为/I
用于与/C:
指定因为/R
正则表达式的字符串。重定向运算符|
也必须在^
之间转义。
FINDSTR不支持OR表达式,它支持正则表达式。但是可以指定多个搜索字符串,这些字符串全部应用于文本的每一行,以便一个接一个地处理,直到出现正匹配或者没有更多搜索字符串。这是一个经典的OR。
正则表达式word[^\\]*$
手段:
word
...必须有发现word
(不区分大小写)。
[^\\]*
...查找0个或多个字符不是反斜线。
$
...必须在行末找到匹配字符串。
正则表达式来获得一个正匹配仅适用于该文件名包含任何apple
或orange
或pear
,但不是文件路径线。
但还有一个FINDSTR选项:/V
。该选项将结果输出反转以处理STDOUT。所以输出是3个正则表达式中的无产生正匹配的行。
命令FOR处理由FINDSTR每条输出线用作用于输出DIR负过滤器和用于每个运行行的命令DEL分别ECHO不分割线成空间/标签由于delims=
而分隔的字符串。
就是这样。
如果存储在由命令DIR处理的目录树中,需要防止删除批处理文件。通过在批处理文件中设置只读属性,可以非常容易地实现该操作,如命令DEL不会删除只读属性设置的文件。
实施例:
@echo off
rem Prevent batch file from deletion by setting read-only attribute on batch file.
%SystemRoot%\System32\attrib.exe +r "%~f0"
for /F "delims=" %%I in ('dir * /A-D /B /S 2^>nul ^| %SystemRoot%\System32\findstr.exe /I /R /V /C:"apple[^\\]*$" /C:"orange[^\\]*$" /C:"pear[^\\]*$"') do del "%%I"
rem It is safe to remove read-only attribute from batch file.
%SystemRoot%\System32\attrib.exe -r "%~f0"
上面的批量代码没有ECHO命令del
之前并且因此真正删除上执行的文件。
为了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
attrib /?
del /?
dir /?
echo /?
findstr /?
for /?
rem /?
另请参阅Microsoft有关Using Command Redirection Operators的文章,以获得对|
和2>nul
的解释。
如果排除字词不存在于应该执行的路径中:@For/F Delims =“%% B in('Dir/B/S/AD”X:\ start \ folder \ *“^| Findstr/RIV“苹果橙香蕉”')做@Echo德尔“%%〜fB”'如果输出看起来确定删除回声 – LotPings