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