高速に3階層分のtreeコマンドと同じ結果を取るバッチファイル
2023年11月15日
このサイトで一番人気のコンテンツである、treeコマンドで階層指定する方法。
「Windowsのtreeコマンドで3階層目までだけを表示する方法」
確かに階層指定した結果は得られるけど、
指定フォルダ内の全検索をして、指定した階層分を表示する仕様なのでどうしても遅い。
今回はDirコマンドの結果を変数に格納して1階層下のフォルダ一覧まで取得しようという話。
これでTreeの2階層指定を軽快にできるはず!
「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