![](/img/trans.png)
[英]How to delete all files in a directory and subdirectories except for certain folders?
[英](Batch) How to recursively delete all files/folders in a directory except those with a leading .?
我有一個目錄src
。 我想遞歸刪除其所有內容,但文件名( .gitignore
,...)和文件夾( .git
, .vscode
... ...)除外.
。 在子目錄中匹配該模式既沒有必要,也無害。
批處理文件中最干凈的方法是什么?
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
:: step 1 : delete all files NOT starting "."
FOR /f "tokens=1*delims=" %%a IN (
'dir /s /b /a-d "%sourcedir%\*" '
) DO (
ECHO %%~nxa|FINDSTR /b /L "." >nul
IF ERRORLEVEL 1 ECHO(DEL "%%a"
)
:: step 2 : delete all directories NOT starting "."
FOR /f "tokens=1*delims=" %%a IN (
'dir /s /b /ad "%sourcedir%\*" ^|sort /r'
) DO (
ECHO %%~nxa|FINDSTR /b /L "." >nul
IF ERRORLEVEL 1 ECHO(RD "%%a"
)
GOTO :EOF
您需要更改sourcedir
的設置以適合您的情況。
所需的DEL命令僅僅ECHO
編用於測試目的。 驗證命令正確無誤后 ,將ECHO(DEL
更改為DEL
即可實際刪除文件。
所需的RD命令僅僅ECHO
編用於測試目的。 確認命令正確后 ,將ECHO(RD
更改為RD
即可實際刪除目錄。
對於整個子樹中的每個文件名,請查看其是否以開頭.
,如果不是,則將errorlevel
設置為non-0,從而刪除文件。
完成此操作后,請使用目錄名重復該操作,但是對反向找到的名稱進行排序,以便任何目錄的子目錄名都將出現在目錄名之前。 嘗試使用rd
刪除目錄-如果該目錄包含文件或子目錄(將隱式地以.
開頭)將保留。 將2>nul
附加到rd
行以禁止顯示錯誤消息(無法刪除目錄,因為該目錄仍包含文件/子目錄)
嘗試執行以下操作以排除帶有前導點的文件夾(基於每個文件夾):
for /f "tokens=*eol=." %%A in ('dir /B /AD') do Echo=%%A
這不會影響在其他位置包含點的文件夾名稱。
遞歸所有文件夾並使用findstr篩選包含\\.
所有文件夾的相對較慢的變體\\.
兩個字符都需要用反斜杠轉義
for /r /D %%A in (*) do @echo %%A|findstr /V "\\\."
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.