忍者ブログ

高速に3階層分のtreeコマンドと同じ結果を取るバッチファイル

2023年11月15日
このサイトで一番人気のコンテンツである、treeコマンドで階層指定する方法。

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


確かに階層指定した結果は得られるけど、
指定フォルダ内の全検索をして、指定した階層分を表示する仕様なのでどうしても遅い。

今回はDirコマンドの結果を変数に格納して1階層下のフォルダ一覧まで取得しようという話。
これでTreeの2階層指定を軽快にできるはず!




さっそくグーグル検索。
http://piyopiyocs.blog115.fc2.com/blog-entry-910.html

結構見てるササキさんのサイトがHIT。
「分かりそう」で「分からない」でも「分かった気」になれるIT用語辞典。

コマンドの結果を変数に格納する際に
1行のFor文で書いているサイトはよく見かけるけど、
複数行でいけるというのが見たことがなかったので新鮮。


どうやら、コマンドの実行結果が%%iに格納されるようなので、
Dirコマンドの対象のフォルダに対して「\%%i」を追記してやればいける。



::--------------------初回バージョン
@echo off
set TarPath="C:\treeTest"
set oPath="C:\treeTest\tree2d.txt"

@echo dir /b /a:d %TarPath% > %oPath%

for /f "usebackq tokens=*" %%i in (`dir /b /a:d %TarPath%`) do (
 echo ■%%i >> %oPath%
 dir /b /ad %TarPath%\%%i >> %oPath%
)
start "" %oPath%

::--------------------初回バージョン



2階層できるなら3階層もできるんじゃね?

コマンドの結果を変数に格納できるんだったら、
2,3階層目のフォルダの前にスペース入れる方が利便性が高いんじゃね?



なかなかうまくいかなくて諦めかけたけど、なんとか完成。


できてしまえば、ソースコードはめっちゃ簡単。。。

※ 全角スペースでインデントを入れています。

※ 2023/11/15追記
フォルダ名にスペースが含まれても良いように%%iを"で括る修正をしました

::--------------------------------2階層用
@echo off
set TarPath="C:\treeTest"
set oPath="C:\treeTest\tree2d.txt"

@echo dir /b /a:d %TarPath% > %oPath%

for /f "usebackq tokens=*" %%i in (`dir /b /a:d %TarPath%`) do (
 echo %%i >> %oPath%
 for /f "usebackq tokens=*" %%j in (`dir /b /ad %TarPath%\"%%i"`) do (
  echo  %%j >> %oPath%
 )
)
start "" %oPath%

::--------------------------------3階層用
@echo off
set TarPath="C:\treeTest"
set oPath="C:\treeTest\tree3d.txt"

@echo dir /b /a:d %TarPath% > %oPath%

for /f "usebackq tokens=*" %%i in (`dir /b /a:d %TarPath%`) do (
 echo %%i >> %oPath%
 for /f "usebackq tokens=*" %%j in (`dir /b /ad %TarPath%\"%%i"`) do (
  echo  %%j >> %oPath%
   for /f "usebackq tokens=*" %%k in (`dir /b /ad %TarPath%\"%%i\%%j"`) do (
   echo   %%k >> %oPath%
  )
 )
)
start "" %oPath%



::-----------------------------------------------------------結果
■まずはフォルダ構成を前に作ったtree2コマンドで確認

tree3 "C:\treeTest"
├─1階層目
│ ├─2階層目
│ │ ├─3階層目
│ │ └─test
│ └─test
│ ├─a
│ └─b
└─他のフォルダ
├─test
│ ├─a
│ └─b
└─test2
├─a
└─b

::-----------------------------------------------------------■tree2dの結果
dir /b /a:d "C:\treeTest"
1階層目
 2階層目
 test
他のフォルダ
 test
 test2

::-----------------------------------------------------------■tree3dの結果
dir /b /a:d "C:\treeTest"
1階層目
 2階層目
  3階層目
  test
 test
  a
  b
他のフォルダ
 test
  a
  b
 test2
  a
  b


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