Win2000定時刪除資料夾內所有子資料夾和檔案
請問怎樣定時刪除一個資料夾內的所有子資料夾和檔案呢?同時又要保留那個父資料夾。比如我要刪除d:test 內的所有子資料夾和檔案,但保留test這個夾子,我是win2000的域,請問怎樣實現呢?bat可以嗎?
回答:在win9x的年代,用deltree這個外部命令就很容解決這個問題,不過從windows 2000 及windows xp之後,就取消了這個命令(真的是很奇怪),那麼現在怎麼解決呢?大家可能想到用 del+rd來解決這個問題。但有個問題,就是rd命令會刪除您指定的目錄。例如,當前目錄結構如下:
D:>attrib /s /d d:test*.*
A R I D:test.txt 此檔案帶有隻讀屬性
A H I D:test.txt 此檔案帶有隱藏屬性
A S I D:test.txt 此檔案帶有系統屬性
H I D:test1 此目錄帶有隱藏屬性
A R I D:test.txt 此檔案帶有隻讀屬性
S I D:test1 此目錄帶有系統屬性
A R I D:test1.txt 此檔案帶有隻讀屬性
批處理原理如果您這麼執行命令 rd d:test,那麼rd會將test這個目錄連同其中的內容一起刪除掉,而我們要保留test這個目錄。那麼怎麼辦呢?我們可以先用del把d:test目錄下的檔案刪除掉,然後再用rd把子目錄刪除掉。這個批處理的內容如下,大家將如下內容儲存為字尾名為.bat 或者.cmd的文字檔案,例如就叫 deltree.bat吧。
---不包含此行---
attrib -s -h -r %1*.* && del %1*.* /q
dir %1 /ad /b /s >del.txt
for /f %%i in (del.txt) do rd %%i /s /q
---不包含此行---
那麼當我們需要刪除test目錄的時候,就這麼執行 "deltree.bat d:test"(不包含引號)。
批處理第一行第一行批處理中的%1就會讀取批處理引數,變成這樣 attrib -s -h -r d:test*.* && del d:test*.* /q
先用attrib 去掉test目錄下所有檔案的屬性,以保障後面的del順利執行。
&& 是連線符號,當執行完前面的命令後,執行連線符後面的命令。
del刪除 test目錄下所有檔案,因為rd命令是無法刪除test目錄下的檔案的。好,test下的檔案刪除完了,我們就開始刪除test目錄下的子目錄。
批處理第二行批處理執行到第二行,%1讀取批處理引數,就是我們在deltree後面輸入的的 d:test,變成這樣 dir d:test /ad /b /s >del.txt 這裡dir命令後的各引數含義如下:
/AD 顯示具有指定屬性的目錄。從而讓後面的rd命令刪除這些目錄
/B 使用空格式(沒有標題資訊或摘要)。避免後面的刪除命令出錯,因為dir命令還會輸出一些其它資訊,例如“ 驅動器 C 中的卷沒有標籤。 卷的序列號是 EE5B-D3AF”,顯然這會導致rd命令出錯。
/S 顯示指定目錄和所有子目錄中的檔案。輸出目錄及檔案的完整路徑,便於後面rd命令刪除。
執行完這一行批處理後,在當前目錄下會產生 del.txt檔案,您執行 type del.txt,會看到如下輸出:
d:test1
d:test1
為什麼要輸出到文字檔案呢?為什麼不直接把dir的結果輸出給rd呢?因為dir的結果會有多行,如果一行一行寫,不是太麻煩了嗎?而且將來實際運用批處理的時候,我們也無法預測目標資料夾下會有多少個子目錄。將dir結果輸出到文字檔案,然後讓rd去讀不是很方便嗎?
批處理第三行好,我們已經將要刪除的子目錄列表輸出到文字檔案del.txt中了,只要使用rd命令刪除這些目錄就好了。但實際上rd本身沒有讀取文字檔案的功能,我們用for來解決這個問題。批處理執行到了最後一行:for /f %%i in (del.txt) do rd %%i /s /q
%%i是在for語句中使用的迴圈變數,這個變數每使用一次,就從 del.txt中讀取一行,作為變數值,然後for負責將這個變數傳遞給後面 do執行的命令中,那麼for依次執行迴圈所形成的命令就是這樣的:
第一次迴圈 rd d:test1 /s /q
第二次迴圈 rd d:test1 /s /q
gnaw0725注:關於for迴圈的更多解釋請參考http://gnaw0725.blogbus.com/logs/4888698.html
這裡的rd引數含義如下:
/S 除目錄本身外,還將刪除指定目錄下的所有子目錄和檔案。用於刪除目錄樹。
/Q 安靜模式,帶 /S 刪除目錄樹時不要求確認
故障排查 好,到此位置,deltree.bat這個批處理就刪除了d:test下的所有檔案和資料夾,而無論它們帶什麼屬性。如果大家在使用這個批處理的過程中出現了問題,例如沒有刪除掉檔案,那麼如何進行故障排查呢?我們可以有兩個check point:
批處理引數獲取就是考察批處理是否正確獲取了引數,也就是我們輸入的目標資料夾,我們可以在批處理的最前面加一個echo %1 ,看看結果,就是這樣:
echo %1
attrib -s -h -r %1*.* && del %1*.* /q
gnaw0725注:批處理可以有9個引數,%0代表批處理自己,第一個引數%1,第二個%2,……依此類推
子目錄輸出列表就是del.txt,您可以輸入 type del.txt,如果正常,輸出的內容應該是d:test下的所有子目錄。
更多資訊
定時執行大家可以用at或者Schtasks或者計劃任務來定時執行上面的批處理,這樣就可以定期的刪除了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/731863/viewspace-1001707/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python 如何刪除資料夾下的所有檔案和子資料夾?Python
- asp.net 遞迴刪除資料夾及其子資料夾和所有檔案[轉]ASP.NET遞迴
- gulp刪除檔案和資料夾
- linux刪除資料夾下所有檔案命令是什麼 linux刪除資料夾下內所有內容怎麼操作Linux
- android 統計資料夾大小及刪除資料夾下所有檔案和路徑Android
- 獲取資料夾及其子資料夾下的所有檔案
- Android遞迴刪除資料夾下所有檔案Android遞迴
- 顯示所有檔案和資料夾"失效 解決無法顯示所有檔案和資料夾
- Python求取資料夾內的檔案數量、子資料夾內的檔案數量Python
- FileUtils類建立、刪除檔案及資料夾
- centos徹底刪除資料夾、檔案命令CentOS
- 資料夾刪除不掉怎麼辦?資料夾無法刪除
- C++讀取某個資料夾下面的子資料夾及其所有檔案C++
- git刪除資料夾Git
- macOS鎖定檔案和資料夾Mac
- 刪除指定資料夾的檔案內容的sh指令碼指令碼
- 查詢某資料夾下所有子資料夾內的py檔案-3一行程式碼搞定行程
- 刪除某個檔案或資料夾時,系統提示無法刪除!
- java檔案和資料夾複製、刪除、移動操作Java
- Linux 刪除檔案和資料夾rm命令詳解Linux
- hadoop 資料夾檔案的建立與刪除Hadoop
- php刪除資料夾及其下面的檔案PHP
- Linux rm 命令刪除檔案或資料夾Linux
- Inno Step 打包檔案成.exe時候刪除指定資料夾
- 【飛雪飄寒】asp.net刪除資料夾裡的所有檔案ASP.NET
- CoLab刪除資料夾
- Linux學習筆記:rm刪除檔案和資料夾Linux筆記
- linux下不使用rm命令刪除檔案和資料夾Linux
- 資料夾刪除不了怎麼辦?資料夾刪除不了的解決方法
- 不能重新命名檔案及不能刪除檔案和資料夾許可權設定
- git刪除遠端資料夾或檔案的方法Git
- temp資料夾可以刪除嗎 temp資料夾幹啥的
- documents是什麼資料夾 documents資料夾可以刪除嗎
- drivers是什麼資料夾 drivers資料夾可以刪除嗎
- 在Linux中,如何建立、移動和刪除檔案和資料夾?Linux
- Linux 刪除資料夾命令Linux
- local資料夾能刪除嗎
- 批量刪除空的資料夾