所用で調べたのでメモ。
Windowsと言うかMS-DOSの「tree」コマンドはディレクトリツリーを視覚的に表示できて便利だけど、オプションがほとんどないので、全サブディレクトリを表示する以外にできない。
浅い階層のディレクトリならともかく、深い階層にたくさんディレクトリがある場合、とんでもなく膨大なツリー図になって使い物にならなくなる。
c:\Documents and Settings> tree フォルダ パスの一覧 ボリューム シリアル番号は 00X000XX XXXX:XXXX です C:. ├─All Users │ ├─Documents │ │ ├─My Music │ │ │ ├─My Playlists │ │ │ ├─Sample Music :
実際の所、ツリー表示をしたいと思うのはだいたい2階層目程度までのディレクトリ構造ではないだろうか?
そこで、2階層目までツリーを表示する簡単な方法はないかな〜?と試してひとまずたどり着いたのが、tree と findstr を組み合わせる方法。
具体的には、次の1行。
tree | findstr /R /C:"^├" /C:"^│ ├" /C:"^│ └" /C:"^└"
もちろん、tree の後にディレクトリ名を指定してもOK。
これを実行すると、こんな感じ。
c:\Documents and Settings> tree | findstr /R /C:"^├" /C:"^│ ├" /C:"^│ └" /C:"^└" ├─All Users │ ├─Documents │ ├─Favorites │ ├─スタート メニュー │ └─デスクトップ └─username
tree の結果をパイプで findstr に渡して、2階層目までに出てくるパターンで抽出するだけ。
ちょっとコマンドプロンプトで表示したいとか、ちょっとしたバッチファイルでテキストに書き出したいというときにはこれで充分だと思う。3階層目まで欲しいときは「/C:」オプションで3階層目のパターンを追記すればたぶんOK。
ただしtreeコマンドの性質上、先に全階層を調べてしまうので、ネットワーク越しとか膨大なディレクトリが入った共有フォルダとかドライブのルートなどを指定して実行すると、とんでもなく時間がかかることがあるので注意。
もっときれいにやりたい場合は、ちゃんとスクリプトなりを書けばきっと出来るでしょう…
追記:関連ソフト
ちなみに、今回DOSコマンドを使ったのは、サーバ上やバッチで使うためだったのですが、自分用PCのGUI環境では、専ら「WinTree」を使ってます。好みの設定で出力できるのでとても便利。また、用途は違いますが、各フォルダの容量一覧を知りたいときは「TreeSize Free」が便利です。