Войти

Показать полную графическую версию : [решено] Список файлов в папке и ее подпапках


popt2t
17-02-2013, 14:37
Как бы его правильно объяснить суть задачи. Короче требуется вывести в текстовый файл список файлов в папке и ее подпапках в таком виде:


Название папки: (не полный путь, а только имена подпапок из указанной папки)
Список файлов (желательно без расширения, но не принципиально)
И так далее по всем подпапкам


Ну или ткните мордой в софтину позволяющую это реализовать.

Anonymоus
18-02-2013, 07:40
@Echo Off
SetLocal EnableDelayedExpansion

:: Устанавливаем корневую папку
Set DataRoot=%~dp0
:: Текстовый файл для вывода
Set OutFile=out.txt

:: Выводим файлы из корневой папки
Echo Index of "\":&Echo Index of "\":>"%OutFile%"
For /F "delims=" %%A In ('Dir "%DataRoot%\" /B /A-D 2^>nul') Do (Echo %%~nA&Echo %%~nA>>"%OutFile%")
Echo.&Echo.>>"%OutFile%"

:: Получаем структуру вложенных папок
For /F "delims=" %%A In ('Dir "%DataRoot%\" /S /B /AD') Do (
Set RelativePath=%%A
:: Получение относительного пути из полного
Set RelativePath=!RelativePath:%DataRoot%=!
:: Выводим файлы из вложенных папок
Echo Index of "\!RelativePath!\":&Echo Index of "\!RelativePath!\":>>"%OutFile%"
For /F "delims=" %%B In ('Dir "%%~A" /B /A-D 2^>nul') Do (Echo %%~nB&Echo %%~nB>>"%OutFile%")
Echo.&Echo.>>"%OutFile%"
)
Pause

popt2t
18-02-2013, 11:18
Anonymоus, спасибо. То что надо. Дальше сам допилю скрипт под себя. Единственное, хотелось бы кое-что уточнить. Объясни пожалуйста назначение SetLocal EnableDelayedExpansion » и %~dp0 ».

popt2t
18-02-2013, 11:56
Единственное, хотелось бы кое-что уточнить »

С этим уже сам разобрался. Но все равно еще есть вопрос :) Хотелось бы добавить в скрипт возможность создания списка по определенным расширениям. Знаю что достаточно дописать один аргумент в команду DIR, но куда конкретно не пойму. Anonymоus, помоги пожалуйста.

Anonymоus
18-02-2013, 14:20
Хотелось бы добавить в скрипт возможность создания списка по определенным расширениям. »
Например, так:


@Echo Off
SetLocal EnableDelayedExpansion

:: Устанавливаем корневую папку
Set DataRoot=%~dp0
:: Текстовый файл для вывода
Set OutFile=out.txt
:: Расширения
Set Extensions=exe bat png

:: Выводим файлы из корневой папки
Echo Index of "\":&Echo Index of "\":>"%OutFile%"
For %%A In (%Extensions%) Do (
For /F "delims=" %%B In ('Dir "%DataRoot%\*.%%A" /B /A-D 2^>nul') Do (Echo %%~nB&Echo %%~nB>>"%OutFile%")
)
Echo.&Echo.>>"%OutFile%"

:: Получаем структуру вложенных папок
For /F "delims=" %%A In ('Dir "%DataRoot%\" /S /B /AD') Do (
Set RelativePath=%%A
:: Получение относительного пути из полного
Set RelativePath=!RelativePath:%DataRoot%=!
:: Выводим файлы из вложенных папок
Echo Index of "\!RelativePath!\":&Echo Index of "\!RelativePath!\":>>"%OutFile%"
For %%B In (%Extensions%) Do (
For /F "delims=" %%C In ('Dir "%%~A\*.%%B" /B /A-D 2^>nul') Do (Echo %%~nC&Echo %%~nC>>"%OutFile%")
)
Echo.&Echo.>>"%OutFile%"
)
Pause

Изменения в коде понятны же, или лучше их прокомментировать?

popt2t
18-02-2013, 15:32
Изменения в коде понятны же, или лучше их прокомментировать? »

Да. Теперь полностью то что надо. Спасибо. Я так понимаю что расширение можно передавать параметром, что бы каждый раз не править скрипт?

Anonymоus
18-02-2013, 17:50
Я так понимаю что расширение можно передавать параметром »
Конечно, можно заменить %Extensions% на %* и вызывать скрипт с параметрами script.bat ext1 ext2 ext3...extN - главное, не забывать разделять их пробелами или запятой.

popt2t
18-02-2013, 18:47
Anonymоus, БОЛЬШОЕ человеческое СПАСИБО за помощь!!!!

popt2t
18-02-2013, 23:47
Не пойму в чем прикол, но на работе все работало как часы, а дома не хочет. Пишет "Непредвиденное появление: \." В чем может быть причина, ума не приложу?

popt2t
19-02-2013, 00:14
И что интересно, такое происходит только с одной папкой!

Блин, вроде разобрался.




© OSzone.net 2001-2012