忍者ブログ

Windowsのtreeコマンドで3階層目までだけを表示する方法

2022年07月25日
他人が作ったフォルダ構成ってわけがわかんねぇ。
力技をする人ほどその傾向が強くていやになっちゃう。

構成を把握するためにtreeコマンドを実行したものの
階層がばらばらでフォルダ数が多すぎて訳が分からん。

で、treeコマンドについてネットで調べながら試行錯誤してみて
いろいろわかってきたので、今回からtreeコマンドについて連載。

目次
Windowsのtreeコマンドで3階層目までだけを表示する方法(今回)
3階層目までだけを表示するtreeコマンドを生成するVBScript
3階層目までだけを表示する自作コマンドtree3.batを作ってみた
Windowsのtreeコマンドで3階層目までだけを表示する簡単な方法

※2023/11/14追記 でかいフォルダでも軽快に動作する別バージョンを作ってみました。
高速に3階層分のtreeコマンドと同じ結果を取るバッチファイル





まずはtreeコマンドについて。

windowsのtreeコマンドは、指定したフォルダの階層構造を可視化してくれる。
フォルダ構成などを説明する際に、実行結果を資料に貼り付けたりする。

フォルダ数が少なければ良いのだけれど、多くなってくると見づらい。
深い階層のフォルダはどうでもいいので、3層まで取るオプションとか欲しい。

調べたところ、treeの階層オプションはLinuxのみでWindowsにはないらしい。
その代わり、コマンドを組み合わせて2階層まで表示する記事を見つけた。

Windowsのtreeコマンドで2階層目までだけを表示する方法
https://align-centre.hatenablog.com/entry/20090912/1252774157


treeを実行すると、"├─"や"└─"、"│"で階層を表示してくれる。
その結果のうち1階層目の表示パターン("├─"か"└─")と
2階層目の表示パターン("│ ├─"か"│ └─"か" ├"か" └")を
findstrで拾うというもの。

findstrのオプションで/C:で文字を検索する。
改行からの文字数を厳密に数える必要があるので、
/Rの正規表現を指定して、^を使って文頭から検索。

findstrで参考にしたサイト
https://atmarkit.itmedia.co.jp/ait/articles/0412/18/news018.html



実際に実行するコマンドは、
検索対象の絶対パスを[フォルダパス]として コマンドファイルのとおり。

※2022/8/15追記 HTMLでは、連続スペースを無視するため表現できずコマンドが間違っていました。上記コマンドファイルを参照してください。

※2023/4/7追記 この方法は、treeコマンドの結果のうち、指定した文字を含む行を抽出しています。処理時間は描画を除きtreeコマンドと同じです。

※2023/6/10追記 treeコマンドに時間がかかる場合、階層を変えて実行するのは面倒なので、treeコマンドの結果を解析するVBScriptを作成しました。

Treeコマンドの結果から階層を指定して取り出すスクリプトの検討
Treeコマンドの結果から階層を指定して取り出すスクリプトのアルゴリズム
Treeコマンドの結果から階層を指定して取り出すスクリプト




●2階層まで場合
tree [フォルダパス] | findstr /R /C:"^├─" /C:"^└─" /C:"^│ ├─" /C:"^│ └─" /C:"^ ├" /C:"^ └"

●3階層まで場合
tree [フォルダパス] | findstr /R /C:"^├─" /C:"^└─" /C:"^│ ├─" /C:"^│ └─" /C:"^ ├" /C:"^ └" /C:"^│ │ ├─" /C:"^│ │ └─" /C:"^│ └" /C:"^│ ├" /C:"^ │ ├" /C:"^ │ └" /C:"^ ├" /C:"^ └"


findstr を使うからには正規表現に詳しくないといけないなぁ。


実行結果
●treeコマンドの場合
C:\TREETEST
├─1階層目
│ ├─2階層目
│ │ ├─3階層目
│ │ │ ├─4階層目
│ │ │ └─test
│ │ │ ├─a
│ │ │ └─b
│ │ └─test
│ │ ├─a
│ │ └─b
│ └─test
│ ├─a
│ └─b
└─他のフォルダ
├─test
│ ├─a
│ │ └─aa
│ └─b
│ └─bb
└─test2
├─a
│ └─aa
└─b
└─bb

●3階層まで場合
tree C:\TREETEST | findstr /R /C:"^├─" /C:"^└─" /C:"^│ ├─" /C:"^│ └─" /C:"^ ├" /C:"^ └" /C:"^│ │ ├─" /C:"^│ │ └─" /C:"^│ └" /C:"^│ ├" /C:"^ │ ├" /C:"^ │ └" /C:"^ ├" /C:"^ └"
├─1階層目
│ ├─2階層目
│ │ ├─3階層目
│ │ └─test
│ └─test
│ ├─a
│ └─b
└─他のフォルダ
├─test
│ ├─a
│ └─b
└─test2
├─a
└─b

●2階層まで場合
tree C:\TREETEST | findstr /R /C:"^├─" /C:"^└─" /C:"^│ ├─" /C:"^│ └─" /C:"^ ├" /C:"^ └"
├─1階層目
│ ├─2階層目
│ └─test
└─他のフォルダ
├─test
└─test2


PR
Comment
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字