バッチファイル(ファイル操作_3_ファイルサイズ確認)

■指定のフォルダ以下のファイルサイズを確認する。
前回作成したバッチを少し修正して、指定のフォルダ以下のファイルサイズを確認するバッチを作ってみた。コードは下記の通り。

echo off

set /a n=0

setlocal enabledelayedexpansion 
for /f "delims=" %%A in ('dir %1 /s /b /a-d') do (
  set "line[!n!]=%%A"
  set /a n=n+1
)

set /a n=n-1
for /l %%m in (0,1,%n%) do (
    dir !line[%%m]! | find "2022"
)

前回と同じようにdirで出力させたファイルのフルパスを1行ずつline[]に入れて、その後、再度dirを使ってファイルサイズを見るようにしている。dirのオプションの/s, /bは前回見たとおり。/a-dは、属性がフォルダのものを除外する。普通にdirで一覧を表示させると下のようにフォルダ(<DIR>)、ファイルが出てくるけど、このオプションを使うとファイルだけになる。

長めの文字列を書き込んでファイルサイズが違うファイルを作成し、上のコードを試すと下のような表示となる。

3列目の数字がファイルサイズ(バイト)になる。

調べていくと、わざわざバッチに組まなくてもwhereのコマンドを使えば似たようにファイルサイズを得ることができた。コマンドとしては、「where /r (指定のフォルダ) /t」で、結果が下のもの。

日付やファイルサイズの表示させる順番がdirとは異なり、ファイルもフルパス表示になっている。

せっかく手を加えてバッチを作るなら、ファイルサイズの順にソートして表示させたり、大きなファイルのみ表示させたりできたら面白そう。ちなみに、同じフォルダの中なら、dir /a-d /o:sでファイル順に表示させることができた。