Как перечислить каталоги нескольких папок в текстовом файле для каждой отдельной папки?

Как перечислить каталоги нескольких папок в текстовом файле для каждой отдельной папки?

У меня есть несколько десятков папок с множеством файлов в них, и мне было интересно, как (и возможно ли это) вывести содержимое каждой папки в текстовый файл, используя, например,каталог > ИНДЕКС.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) в названии каждого из них. Если вы ленивы, как я, и хотите удалить индивидуальные файлы индекса перед запуском этогонth количество раз, вы можете выбросить исключение 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(

Дайте мне знать, если вы искали что-то совершенно другое или эта информация оказалась вам хоть как-то полезной.

Использованная литература:режидля.

Связанный контент