ねもぷらす

ふぁいんでぃんぐねもの日記。プログラミングとか育児とか

ドライブの空き容量をコマンドで調べる

結論

こんなバッチできました。

@echo off
for /f "tokens=*" %%a in ('fsutil fsinfo drives') do call :step01 %%~a
pause
exit /b 0

:step01
    shift /1
    if ?%1==? exit /b 0
    fsutil volume diskfree %1 > nul
    if errorlevel 1 exit /b 0
    set    Result=
    for /f "tokens=*" %%a in ('fsutil volume diskfree %1 ') do call :step02 %%~a
    call :get_percent %Result%

    rem ----- ▼ ドライブと空き容量を表示
    echo %1 : %percent%
    GOTO %0

:step02
    set MB=%3
    set MB=%MB:~0,-6%
    set Result=%Result%%MB%,
    exit /b 0

:get_percent
    set /a percent = %~1 * 100 / %~2
    exit /b 0

実行結果

D:\> sample.bat
C:\ : 49
D:\ : 80
続行するには何かキーを押してください . . .

fsutil volume diskfree

fsutil なるコマンドを叩くと、引数で指定したドライブの総容量と空き容量がバイトで帰ってくるらしい。

D:\> fsutil volume diskfree c:\
空きバイト総数               : 118183354368
バイト総数                   : 238245900288
利用可能な空きバイト総数     : 118183354368

「空きバイト総数」÷「バイト総数」×100とすればパーセンテージがとれるかな><
でも数値がでかすぎ…int型に収まらないといろいろ使い勝手が悪い。
右から5~6ケタぶった切って数値を使うべか…


あとドライブを指定しないと容量が確認できないけど、PCになにドライブがあるのか知る必要がある。

そこで fsutil fsinfo drives を叩くことで PC のドライブを一覧してくれる、、、…横に。

D:\>fsutil fsinfo drives

ドライブ: C:\ D:\ Q:\ X:\ Y:\ Z:\

ここで Z:\ はネットワークドライブであり、X:\、Y:\ は SUBST コマンドでパスを置き換えただけの偽ドライブ。
Q:\ に至っては CDドライブであり、fsutil volume diskfree コマンドは結果をかえしてくれませーん

D:\> fsutil volume diskfree Q:\
エラー:  デバイスの準備ができていません。

FSUTIL ユーティリティにはローカル NTFS ボリュームが必要です。


上記より、

  • fsutil fsinfo drives でドライブ一覧を取得
  • fsutil volume diskfree が成功するか確認
  • fsutil volume diskfree の実行結果を変数に格納
  • 実行結果を格納した変数の 1個目 / 2個目 でパーセンテージを取得
    • プロンプトは小数点以下切り捨てなので 1個目 * 100 / 2個目 としてあげる。


これでドライブ単位の容量監視ができる。めんどーー