用批處理實現Windows下子目錄大小統計功能

用批處理實現Windows下子目錄大小統計功能

吳旻

泰巖網絡工作室

    統計當前目錄下各文件夾的大小,在Linux下面比較簡單,一個 du -sh * 命令就基本解決問題了。雖然在資源管理器是單擊右鍵,然後選屬性可以看到某個文件夾的大小,但當我想知道C:\windows目錄下哪個子目錄佔用了1G以上的空間時,這個方法就顯得太笨了,要一個一個點半天才能有結果。

    本文提到的方法,是利用了 dir /s 這個命令,它可以對一個目錄進行統計,並在最後給出綜合的結果。核心的代碼有三部分:

    1、用 dir /ad /b %1 > 1.txt  將指定目錄下的子目錄保存到 1.txt 文件中,以備後用

    2、使用 for 語句從 1.txt 文件中讀出每一個子目錄,再用 dir /s 將此子目錄的結果保存到 2.txt 文件中。

    3、從 2.txt 文件中讀出最後一行,就是想要的那個子目錄的統計結果。此處,我再次使用了 for 語句的功能,即逐行讀出,但只顯示最後一行。

    其它部分代碼,是配合整個批處理來使用的。把如下代碼保存了一個批處理文件(如:lu.bat),就可以使用了

 

@echo off

IF [%1]==[] GOTO USAGE

if NOT exist "%1" (ECHO "%1" path not exist & GOTO END)

:DIR_PATH

dir /ad /b %1 > 1.txt

setlocal enabledelayedexpansion

for /f "tokens=*" %%i in (1.txt) do (
rem    echo 
    dir /s  "%1\%%i" |findstr 個文件 > 2.txt || echo. > 2.txt

rem    for /f "eol=0 tokens=1,3 " %%j in (2.txt) do set ll=%%k 字節 %1\%%i  %%j 個文件 
    for /f "eol=0 tokens=1,3 " %%j in (2.txt) do set ll=%%k & set ll=!ll:~0,-9! M %1\%%i  %%j 個文件 

    echo  !ll!  
rem    echo.
)

set total= 
Endlocal
del 1.txt 2.txt
GOTO END


:USAGE
echo Usage: %0 dir_path
GOTO   END 

:END
rem pause


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章