2014-10-09 119 views
3

我正在嘗試編寫一個簡單的批處理文件,它將遞歸地查找和刪除文件夾。但是下面的腳本不在子文件夾下查看。想知道如何做到這一點?使用批處理文件遞歸地查找和刪除文件夾

@echo off 
cd /d "C:\" 
for /d %%i in (temp) do rd /s "%%i" 
pause 

謝謝!

+0

遞歸rd選項使用大寫'S'。這在你的腳本中看起來像是一個小寫的''。 – neilh 2014-10-09 16:36:46

+0

@neilh:除非命令使用大寫和小寫來表示不同的東西,否則小寫字母可以在大多數DOS/Windows命令下正常工作。在'rd'的情況下,兩種情況都是一樣的。 – 2014-10-09 16:41:39

+0

謝謝你們,但試過大寫字母(S)和大寫字母(RD)都沒有幫助.. – rasuajak 2014-10-09 16:49:13

回答

8
for /d /r "c:\" %%a in (temp\) do if exist "%%a" echo rmdir /s /q "%%a" 
c:\測試用於 temp文件夾的存在

對於每個文件夾(/d),遞歸(/r),並且如果它存在,刪除它

目錄去除命令僅呼應到控制檯。如果輸出正確,請刪除echo命令

+0

謝謝MC,我認爲這是工作,但小呃。當我運行以下命令:@echo off cd/d「C:\」 for/d/r「c:\」%% a in(temp1 \)do if exists「%% a」echo rmdir/S/Q「%% a」 pause – rasuajak 2014-10-09 17:19:52

+0

謝謝MC,我認爲這是工作,但小呃。當我運行以下內容: @echo off for/d/r「c:\」%% a在(temp1 \)中如果存在「%% a」echo rmdir/S/Q「%% a」 它只是模擬而不是deletig所述的 「TEMP1」 的文件夾,其是在c: 輸出: C:\> C:\ TestScripts \好\工作\ find_delete_temp_workarea.bat 命令rmdir/S/Q「 c:\ temp1 \「 rmdir/S/Q」c:\ test3 \ temp1 \「 rmdir/S/Q」c:\ tmp \ temp1 \「 – rasuajak 2014-10-09 17:27:53

+1

@rasuajak,首先閱讀答案的最後一行。其次,將結尾反斜槓保留在文件夾的名稱中以避免「if exists」可能與具有相同名稱的文件相匹配 – 2014-10-09 17:30:10

0

/S開關rd意味着

/S  Removes all directories and files in the specified directory 
     in addition to the directory itself. Used to remove a directory 
     tree. 

這並不意味着它會搜索所有目錄具有指定名稱尋找一個和刪除它們。

換句話說,如果從C:\Temp文件夾運行rd /S Test,它會刪除C:\Temp\Test\*.*,包括C:\Temp\Test(任何名稱)的所有子目錄。它確實會刪除C:\Temp\AnotherDir\Test,因爲這不是C:\Temp\Test的子文件夾。

+0

感謝但在上面的例子中,如果我從C:\而不是C運行「rd/S Test」 :\ Temp,是不是所有在C:\下的「Test」文件夾的getrid? – rasuajak 2014-10-09 17:06:13

+0

然後,它會刪除'C:\ Test \ *。*'和子文件夾,但不會刪除'C:\ Dummy \ Test \',就像我所說的那樣。 :-) – 2014-10-09 18:47:04

相關問題