複数のフォルダーのディレクトリを、個々のフォルダーごとにテキスト ファイルにリストするにはどうすればよいですか?

複数のフォルダーのディレクトリを、個々のフォルダーごとにテキスト ファイルにリストするにはどうすればよいですか?

複数のファイルが入っているフォルダが数十個あるのですが、例えば次のようにして各フォルダの内容をテキストファイルにエコーする方法(またはそれが可能かどうか)を知りたいです。ディレクトリ > INDEX.txtバッチファイルまたはコマンドラインから実行します。

実行するのはFOR /D %A IN (X:\destinationFolder*.*) DO (DIR >> INDEX.TXT "%A\")親ディレクトリにすべてのフォルダーとその内容がリストされたテキスト ファイルが作成されますが、フォルダーごとに個別のインデックスを作成できますか? それとも、バッチ スクリプトに要求しすぎているのでしょうか?

重要な情報かどうかはわかりませんが、私は Windows 10 を実行しています。どんな助けでも大歓迎です。

答え1

ここで何を探しているのかよく分かりませんが、これをまとめるのは作業するよりも楽しかったです。

@echo off

set "dir=C:\Your\Top\Folder"

del /f /q "%dir%\index.txt"

if exist "%dir%" (
    echo(
    echo Report for:
    echo %dir%
    echo(
    echo Subfolders:
    dir /a:d /o:n /b "%dir%"
    echo(
    echo Files:
    dir /a:-d /o:n /b "%dir%"
    echo(
    echo \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
)>>"%dir%\index.txt"

for /d /r "%dir%" %%A in (*) do (
    echo(
    echo Report for:
    echo %%A
    echo(
    echo Subfolders:
    dir /a:d /o:n /b "%%A"
    echo(
    echo Files:
    dir /a:-d /o:n /b "%%A"
    echo(
    echo \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
)>>"%dir%\index.txt"

当然、出力ファイルを希望どおりにするために、このうちの任意の部分を保持/削除/変更することができます。これは、あくまでもアイデアを提供するためのものです。これにより、変数がdir最上位フォルダーとして設定され、変更が簡単になります。 は、その最上位フォルダーの出力if existを取得するためだけに存在します。dirそれ以外の場合は、再帰的にループするコマンドがありますfor /d /r。出力レイアウトは、これをいくつかの場所でループした後、最も魅力的だと思ったもの(あまり気にせずに)に基づいた個人的な好みです。変数を設定した後、dirバッチが最初に行うことはインデックス ファイルを削除することです。そのため、チェックするたびに手動で削除する必要はありません。そうしないと、>>複数の実行が最後までエコーされ続けます。

別々のインデックスファイルが必要な場合は、それぞれサブフォルダーでは、遅延展開を有効にして、ループのメイン部分をfor次のようにネストするだけです。

setlocal enabledelayedexpansion
for /d /r "%dir%" %%A in (*) do (
    set "name=%%~nA"
    (echo(
    echo Report for:
    echo %%A
    echo(
    echo Subfolders:
    dir /a:d /o:n /b "%%A"
    echo(
    echo Files:
    dir /a:-d /o:n /b "%%A"
    echo(
    echo \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)>>"%dir%\!name! index.txt"
)

%%~nAこれにより、各タイトルにフォルダ名( )が付いた個別のテキストファイルが作成されます。私のように面倒な場合は、これを実行する前に個別のインデックスファイルを削除してください。if exist "%dir%\!name! index.txt" del /f /q "%dir%\!name! index.txt"ループ内で変数を設定した直後にをスローすることができますname。これをブロック内に配置することもできます。

for /d /r "%dir%" %%A in (*) do (
    set "name=%%~nA"
    if exist "%dir%\!name! index.txt" del /f /q "%dir%\!name! index.txt"
    (echo(

まったく違うものを探していたのか、それともこれが少しでも役に立ったのかをお知らせください。

参考文献:ディレクトリそしてのために

関連情報