您可以使用包含此批處理文件(或多或少)只是一個命令行。在命令提示符窗口中運行此批處理文件,並且當前目錄是要刪除不需要的文件並驗證輸出的目錄樹的根目錄。然後刪除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