ab’s blog

インフラの呟きです。

Windows ディレクトリ単位で使用サイズを表示する。 dosバッチ

hahahahahaha

はじめに

Windowsのdisk容量(使用率)が増えたたときに、まずどのディレクトリのサイズが大きいかを確認するためのバッチです。他にWindows用duコマンドを追加するなどという方法もあるのですが制約があって追加できない、現状の機能でなんとかしたいというとき用です。元々はワンライナーで作ろうと思ったのですがなんかおっきくなりました。途中でpowershell呼び出してますがそのうちpowershell不要にしたい。win2012,2016,2019で動作確認

使い方

以下のbatファイルを適当なところに配置してコマンドプロンプトから呼び出します。 ファイル名の後ろに引数としてサイズを確認したいディレクトリ階層を指定します。> a4.bat c:\> a4.bat "c:\Program Files" など

a4.bat

@echo off
REM バッチ名:a4.bat
REM 目的:ディレクトリ単位でサイズを確認したいときに使用
REM 使い方:
REM  a4.bat [パス] 
REM
REM     使用例)
REM       > a4.bat c:\
REM       > a4.bat "c:\Program Files" など


rem 引数を格納
set FINDPATH=%~1

rem 引数から渡されるパスの末尾が「:」かチェック
rem 「:」ならexit
echo %FINDPATH%>a4path.txt
findstr /V /R ":$" a4path.txt
if ERRORLEVEL 1 (
  echo %FINDPATH%
  echo パスを確認してください
  exit /B 1
)

rem 引数から渡されるパスの末尾が「¥」かチェック
rem 「¥」なら末尾の「¥」を削除
findstr /R "\\$" a4path.txt
if ERRORLEVEL 1 (
  set DIR=%FINDPATH%
  ) else (
  set DIR=%FINDPATH:~0,-1%
)

rem echo ①%DIR%



rem 引数から渡されるパス直下のディレクトリ一覧の格納とチェック
rem パスが不正ならexit
dir /b /AD-L "%~1" > a4kekka.txt
if ERRORLEVEL 1 (
  echo %FINDPATH%
  echo パスを確認してください2
  exit /B 1
)



rem パス直下のディレクトリのサイズを出力
FOR /f "delims=," %%f IN (a4kekka.txt) do (
  echo %DIR%\%%f
  dir /s /a "%DIR%\%%f" >a4size.txt
  powershell -command "(Get-Content a4size.txt)[-2]"
)

ここらへんのメンテナンス系のコマンドはデフォルトで入っていてほしいところです。 以上