結局のところ(5年)、私は今、ずっと利用可能であった1つのライナーを単純なコマンドラインで見つけました。ROBOCOPY
Vista以降の標準のWindowsユーティリティであり、Windowsリソースキットを介してXPで利用できます。
robocopy . . /l /s /njh /njs /ns /lev:4 >c:\temp\dir_list.txt
説明
/L :: List only - don't copy, timestamp or delete any files.
/S :: copy Subdirectories, but not empty ones.
/NJH :: No Job Header.
/NJS :: No Job Summary.
/NS :: No Size - don't log file sizes.
/LEV:n :: only copy the top n LEVels of the source directory tree.
オプションにはカウントにルートが含まれ、/lev:n
3つのサブディレクトリレベルが必要です。そのため、値に1を追加しました。
さらに処理する
ルートフォルダが出力に含まれ、各パスに固定幅の先頭の空白が含まれているという点で、出力は完全ではありません。ルートパスと先頭の空白を。で簡単に削除できますFOR /F
。
(for /f "skip=2 tokens=*" %A in ('robocopy . . /l /s /njh /njs /ns /lev:4') do @echo %A) >c:\temp\dir_list.txt
出力には最初のROBOCOPY
空白行が含まれているため、skip
1ではなく2にする必要があります。
各パスはで終わり\
ます。ファイルではなくフォルダを一覧表示していることが明らかになるので、この機能が気に入っています。末尾を本当に削除したい場合は\
、を追加できますFOR
。
(for /f "skip=2 tokens=*" %A in ('robocopy . . /l /s /njh /njs /ns /lev:4') do @for %B in ("%A.") do @echo %~fB) >c:\temp\dir_list.txt
しかし、コマンドを入力するのは少し手に負えなくなりつつあります。ルートパスとレベルを引数として取るユーティリティバッチファイルに、この手法を簡単に組み込むことができます。コマンドをバッチスクリプト内に配置する場合は、パーセントを2倍にすることを忘れないでください。