LoginSignup
3
3

More than 5 years have passed since last update.

du っぽいコマンド

Last updated at Posted at 2014-08-06

成果物

Windows 7 上で du っぽい表示をするバッチファイルを作成した

使用上の注意

  • 文字コードはおそらく Shift_JIS 固定が安全 (cmd の場合)
  • 表示単位は byte のみ
  • 限られた環境でしか動作チェックしてません

ソース

du.bat
@echo off

@rem du ぽいもの

if "%1" equ "/?" (
  @rem USAGE
  echo du [/s] [対象ディレクトリ]
  echo /s サブディレクトリ全てを対象にする (s は小文字限定^)
  echo 対象ディレクトリ の指定がない場合、カレントを対象にする

  exit /b 0
) else if "%1%2" equ "/s" (
  SET _SUB_=TRUE
  SET _TARGET_=.
) else if "%1" equ "" (
  SET _SUB_=FALSE
  SET _TARGET_=.
) else if "%1" equ "/s" (
  SET _SUB_=TRUE
  SET _TARGET_=%2
) else (
  SET _SUB_=FALSE
  SET _TARGET_=%1
)


if not exist "%_TARGET_%" (
  echo "%_TARGET_%" is not exists.
  exit /b 1
)


setLocal enableDelayedExpansion

if %_SUB_% equ TRUE (
  for /f "useBackq  tokens=*" %%y in (`dir /ad-L /b %_TARGET_%`) do (
    set _DIR_=%_TARGET_%\%%y

    dir /s /a-d "!_DIR_!" > nul 2> nul
    if errorLevel 1 (
      echo "!_DIR_!"  is empty.
    ) else (
      for /f "useBackq tokens=3" %%x in (`dir /s /a-d "!_DIR_!" ^| findstr /e バイト`) do (
        set DIR_RECURSIVE_SIZE=%%x
      )
      echo "!_DIR_!"  !DIR_RECURSIVE_SIZE! (bytes^)
    )
  )
) else (
  @rem ↑と共通箇所を分かりやすくするためインデント
    set _DIR_=%_TARGET_%

    dir /s /a-d "!_DIR_!" > nul 2> nul
    if errorLevel 1 (
      echo "!_DIR_!"  is empty.
    ) else (
      for /f "useBackq tokens=3" %%x in (`dir /s /a-d "!_DIR_!" ^| findstr /e バイト`) do (
        set DIR_RECURSIVE_SIZE=%%x
      )
      echo "!_DIR_!"  !DIR_RECURSIVE_SIZE! (bytes^)
    )
)

exit /b 0

のように呼び出す形に書くと

call :__function で呼んだサブルーチンの先では、引数を DelayedExpansion できてなかった。
%%y を遅延展開させる書き方があるのだろうか・・・?

細かい箇所が微妙

  • 命名とか大文字/小文字とかの規約が謎
  • dir /s /a-d "!_DIR_!" の内容を tail -1 するために、1行ずつ変数に入れては上書きを繰り返す、という不毛な記述が必要
  • ディレクトリが空なら 0 bytes 表示で別に良かったのだけれど、空ディレクトリの場合に出る警告「ファイルが見つかりません」を捨てる手段がよく分からず・・・
  • 存在しないオプションが渡されることを考慮していない
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3