簡體   English   中英

(批次)如何遞歸刪除目錄中除帶有前導。之外的所有文件/文件夾?

[英](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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM