Edited at

ワンラインでフォルダ以下のファイル、フォルダ数を再帰的にカウントするコマンド(備忘録)


概要

ホワイトリスト型のセキュリティツールが入ったPCでファイル数が多いフォルダを調査する羽目になったので、今後使うかどうかはさておきバッチファイル等を使わずにコマンド一行のみでカウントする手段をメモっておく。


実行環境

一応Windows7で確認したが、コマンドプロンプトを使用するので多分Windows系OSなら問題なく動くはず。


実行コマンド

各コマンド、オプションの説明はdir /?等で確認できるので割愛。


コマンドプロンプト

for /f "delims=" %a in ('dir /s /b /ad "パス"') do ( echo %a && dir /b "%a" | find /c /v "" )


大まかな処理の流れとしては



  • for /f "delims=" %a in ('dir /s /b /ad "パス"')で属性がフォルダのものだけを一行ずつ変数(%a)に格納する。


  • echo %aでパスを表示する。


  • &&でコマンドを結合して一行で実行できるようにする。


  • dir /b "%a"で1)で変数に格納したフォルダ以下を取得、|find /c /v ""に渡して行数をカウントする。


実行結果

コマンドプロンプトを起動して上記の"パス"のところにサンプルとして用意した"C:\work\temp"を入れて実行すると・・・


実行結果

C:\work\temp\sample1

6
C:\work\temp\sample2
10
C:\work\temp\sample1\sample1_1
5

いい感じにフルパスとファイル、フォルダ数が表示されている。


その他・あとがき

今回は表示さえできれば結果がログに残るからテキスト出力とかしてないけど、必要ならリダイレクトで出力する。

バッチとかが使える環境ならshebang記法でJScriptとかを埋め込んで整形したテキストとかにできるのになぁ・・・(´・ω・`)