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