†DOSとバッチとスクリプト†

ディレクトリ・サイズの表示

作成開始日 2023.06.27
最終更新日 2023.07.31

ファイル整理の際に、いちいちディレクトリ・サイズ(フォルダ・サイズ)を確認するのが面倒なので作ってみた。と言っても、DIRコマンドは「xxx 個のファイル xxxxx バイト」という形式で総バイト数を表示するので、その情報をそのまま表示しているだけ。

サブディレクトリに階層構造がある場合は、階層ごとに総バイト数が表示される。そして最後に、そのサブディレクトリ以下の総バイト数が表示される。つまり、「if "^%%b"==…」の行は何度も実行されるが、最後の値が最終的に使用される。

DS.BAT(Directory Size)

@echo off
@setlocal enabledelayedexpansion

for /D %%f in (*) do (
  set dname=%%f
  for /f "usebackq tokens=1-4" %%a in (`dir "%%f\*.*" /s`) do (
    if "%%b"=="個のファイル" (set sz=%%c)
  )
  set sz=                   !sz!
  set sz=!sz:~-16!
  echo !sz! %%f
)
@endlocal

exit /B
実行例
実行結果は「サイズ−ディレクトリ名」の順で表示される。当初はディレクトリ名を先に持ってくるつもりだったが、Win7のバッチの文字列処理では全角文字/半角文字の区別がない(?)ため、桁揃えで整形するのが困難。

当初はサイズによって色分けをする予定だったが、Win7のコマンドラインでは、ANSIのエスケープシーケンスによる画面制御ができない。ansiconを使えば可能になるそうだが…

サブディレクトリの階層が深くて複雑な場合、シャレにならないくらい時間が掛かるので、使いどころには注意。

当初は各ファイルのサイズを足し合せて合計を計算していたが、バッチで扱える数値は32ビットなので2GBが限界。ま、最低単位をKBにする対処方法もあるが(上限が2TBになる)…

なお、出力結果をサイズ順に並べたいときは、以下のようにする。

ds | sort /r


【DOSとバッチとスクリプト目次】 【ホーム】