コマンドプロンプトで Linux の du っぽいコマンドを作ってみる

後輩が コマンドプロンプトで du っぽいことがしたいができないと 言っていたので、コマンドプロンプトの奥深さを理解してもらおうと ちょっと考えてみました。

Windows XP で動作確認しました。 Windows 2000 では、ディレクトリのパスにマルチバイト文字が 含まれていると うまく動かないときがあります。

@ECHO OFF

SET DIROPTION=/A:-D
SET CURRENTPATH=%CD%
SET TARGETPATH=%~1
IF "%TARGETPATH%"=="" SET TARGETPATH=%CURRENTPATH%

CD /D %TARGETPATH%

FOR /R %%i IN (.) DO (
    FOR /F "usebackq tokens=1,3" %%j IN (
        `DIR %DIROPTION% /-C "%%~fsi" 2^>nul ^|
         FINDSTR "個のファイル.*バイト$"`
    ) DO (
        ECHO "%%~fi",%%j,%%k
    )
)

CD /D %CURRENTPATH%

これを du.bat として保存します。

引数に対象のディレクトリを指定できます。 指定しない場合、カレントディレクトリが対象となります。

C:\> du.bat D:\wwwroot

"D:\wwwroot",1,19001
"D:\wwwroot\css",7,106837
"D:\wwwroot\img",13,2685964 

出力結果は、パス、ファイル数、合計ファイルサイズです。

このスクリプトは、ファイル数が 0 のディレクトリは 処理負荷を減らすために出力しないようにしています。 ファイル数が 0 のディレクトリも出力するには 3 行目の設定を次のように変更します。

SET DIROPTION=/A:-

Google サイト内検索

Amazonアソシエイト