後輩が コマンドプロンプトで 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:-