批處理刪除空文件夾
更新時間:2008年03月24日 19:34:02 作者:
有人問我,什么工具能尋找和刪除硬盤上所有空的文件夾,或只包含空的子文件夾的文件夾?殺雞焉用宰牛刀,其實(shí)不用任何軟件,直接使用批處理命令就能實(shí)現(xiàn)這個目的。
實(shí)現(xiàn)代碼:
@echo off
for /f "tokens=*" %%a in ('dir /b /ad /s "目標(biāo)文件夾"^|sort /r') do rd "%%a" 2>nul
pause
goto :eof
@echo off
for /f "delims=" %%i in ('dir /ad /b /s') do call :rd_dir_empty "%%i"
goto :eof
rem ======= 刪除空目錄 =========
:rd_dir_empty
rd %1 2>nul||goto :eof
set dir_route=%1
for /f "delims=" %%i in (%dir_route%) do (
set dir_route="%%~dpi"
for /f "delims=" %%j in ('dir /ad /b "%%~dpi"')do rd "%%~dpi%%j" 2>nul||goto :eof
)
:: 把路徑最后的\去掉,以便set route_deepest="%%~dpi"能取到上一層路徑
if "%dir_route:~-2,1%"=="\" set dir_route="%dir_route:~1,-2%"
if /i not "%cd%"==%dir_route% call :rd_dir_empty %dir_route%
goto :eof
第一步:進(jìn)入Windows的MS-DOS窗口(Windows 2000/XP叫命令行提示符),進(jìn)入要查找空文件夾的驅(qū)動器,執(zhí)行:
dir /ad/b/s | sort /r >empties.bat。
小提示
上面命令行中“|”的輸入方法是按住Shift鍵按“\”鍵。
第二步:命令運(yùn)行后,當(dāng)前目錄下會生成一個Empties.bat文件,其中包含了逆序排列的所有文件夾的清單。用Word或記事本打開該文件,把每一行內(nèi)容分別放入一對英文引號之內(nèi),然后在每一行前面插入“rd ”前綴(rd后加一個空格)。
以Word為例,按Ctrl+H打開“查找和替換”功能,查找“^p”(不含引號,下同?!癪p”可以使用以下方法輸入:在“查找和替換”對話框中點(diǎn)“高級”按鈕,然后點(diǎn)擊“特殊字符→段落標(biāo)記”),替換成“^prd ”(rd后面加一個空格),然后手工修正第一行和最后一行的內(nèi)容。保存修改后的Empties.bat文件,進(jìn)入命令行窗口執(zhí)行這個批處理文件。Empties.bat將試圖刪除(即rd命令的作用)每一個文件夾,但包含內(nèi)容的文件夾不可能用rd命令刪除,結(jié)果就刪除了所有空的文件夾。
知其所以然:我們來了解一下前面Dir命令的運(yùn)行原理:“/ad”要求Dir命令選出所有目錄;“/b”表示只顯示文件夾名稱(不顯示Dir命令的標(biāo)題信息或摘要);“/s”表示搜索,即查找當(dāng)前文件夾及其所有的子文件夾。Dir命令的輸出通過管道命令(“|”)傳遞給Sort命令。Sort命令的作用是排序,“/r”選項(xiàng)表示逆序排列。
最后,Sort命令的輸出被重定向(“>”)到Empties.bat文件。由于要求Sort命令逆序排列輸出結(jié)果,所以Empties.bat文件中子文件夾總是位于父文件夾的前面,因而刪除文件夾時,空的子文件夾總是先被刪除,空的父文件夾也得以被刪除??梢钥吹剑擅钸\(yùn)用Windows內(nèi)建命令,許多表面上看起來復(fù)雜的任務(wù)也可以輕而易舉地完成!
小提示:Dir的三個小招數(shù)
★查看文件夾全部隱藏文件:如果想查看Windows文件夾和它所有子文件夾中全部的隱藏文件,只需輸入:DIR C:\Windows.* /AH/S/B/P。
★輕松創(chuàng)建長文件名文件列表:你可以創(chuàng)建一個批處理文件如Getlist.bat,其中的內(nèi)容只有DIR *.* /B >LIST.TXT,將它復(fù)制到要創(chuàng)建文件列表的文件夾,然后雙擊運(yùn)行即可將文件夾所有文件的列表保存到List.txt文件中。
★多個目錄齊現(xiàn)身:如果想同時列出C盤和D盤根目錄下的內(nèi)容,那么只要輸入:DIR C: D:即可。[
復(fù)制代碼 代碼如下:
@echo off
for /f "tokens=*" %%a in ('dir /b /ad /s "目標(biāo)文件夾"^|sort /r') do rd "%%a" 2>nul
pause
goto :eof
@echo off
for /f "delims=" %%i in ('dir /ad /b /s') do call :rd_dir_empty "%%i"
goto :eof
rem ======= 刪除空目錄 =========
:rd_dir_empty
rd %1 2>nul||goto :eof
set dir_route=%1
for /f "delims=" %%i in (%dir_route%) do (
set dir_route="%%~dpi"
for /f "delims=" %%j in ('dir /ad /b "%%~dpi"')do rd "%%~dpi%%j" 2>nul||goto :eof
)
:: 把路徑最后的\去掉,以便set route_deepest="%%~dpi"能取到上一層路徑
if "%dir_route:~-2,1%"=="\" set dir_route="%dir_route:~1,-2%"
if /i not "%cd%"==%dir_route% call :rd_dir_empty %dir_route%
goto :eof
第一步:進(jìn)入Windows的MS-DOS窗口(Windows 2000/XP叫命令行提示符),進(jìn)入要查找空文件夾的驅(qū)動器,執(zhí)行:
dir /ad/b/s | sort /r >empties.bat。
小提示
復(fù)制代碼 代碼如下:
上面命令行中“|”的輸入方法是按住Shift鍵按“\”鍵。
第二步:命令運(yùn)行后,當(dāng)前目錄下會生成一個Empties.bat文件,其中包含了逆序排列的所有文件夾的清單。用Word或記事本打開該文件,把每一行內(nèi)容分別放入一對英文引號之內(nèi),然后在每一行前面插入“rd ”前綴(rd后加一個空格)。
以Word為例,按Ctrl+H打開“查找和替換”功能,查找“^p”(不含引號,下同?!癪p”可以使用以下方法輸入:在“查找和替換”對話框中點(diǎn)“高級”按鈕,然后點(diǎn)擊“特殊字符→段落標(biāo)記”),替換成“^prd ”(rd后面加一個空格),然后手工修正第一行和最后一行的內(nèi)容。保存修改后的Empties.bat文件,進(jìn)入命令行窗口執(zhí)行這個批處理文件。Empties.bat將試圖刪除(即rd命令的作用)每一個文件夾,但包含內(nèi)容的文件夾不可能用rd命令刪除,結(jié)果就刪除了所有空的文件夾。
知其所以然:我們來了解一下前面Dir命令的運(yùn)行原理:“/ad”要求Dir命令選出所有目錄;“/b”表示只顯示文件夾名稱(不顯示Dir命令的標(biāo)題信息或摘要);“/s”表示搜索,即查找當(dāng)前文件夾及其所有的子文件夾。Dir命令的輸出通過管道命令(“|”)傳遞給Sort命令。Sort命令的作用是排序,“/r”選項(xiàng)表示逆序排列。
最后,Sort命令的輸出被重定向(“>”)到Empties.bat文件。由于要求Sort命令逆序排列輸出結(jié)果,所以Empties.bat文件中子文件夾總是位于父文件夾的前面,因而刪除文件夾時,空的子文件夾總是先被刪除,空的父文件夾也得以被刪除??梢钥吹剑擅钸\(yùn)用Windows內(nèi)建命令,許多表面上看起來復(fù)雜的任務(wù)也可以輕而易舉地完成!
小提示:Dir的三個小招數(shù)
★查看文件夾全部隱藏文件:如果想查看Windows文件夾和它所有子文件夾中全部的隱藏文件,只需輸入:DIR C:\Windows.* /AH/S/B/P。
★輕松創(chuàng)建長文件名文件列表:你可以創(chuàng)建一個批處理文件如Getlist.bat,其中的內(nèi)容只有DIR *.* /B >LIST.TXT,將它復(fù)制到要創(chuàng)建文件列表的文件夾,然后雙擊運(yùn)行即可將文件夾所有文件的列表保存到List.txt文件中。
★多個目錄齊現(xiàn)身:如果想同時列出C盤和D盤根目錄下的內(nèi)容,那么只要輸入:DIR C: D:即可。[
相關(guān)文章
寫了個批量替換字符串的bat批處理(replaceChar.bat)
鑒于dos知識有限,還沒找到好的辦法來避免這兩種狀況。如果用shell腳本完成替換功能就簡單多了。或者直接用ultraedit的替換功能更簡單2017-04-04bat實(shí)現(xiàn)刪除文本中的空行、空格、制表符、最后一行空行
本文主要介紹了 bat實(shí)現(xiàn)刪除文本中的空行、空格、制表符、最后一行空行2024-02-02