16

Я столкнулся с небольшим затруднением, пытаясь рекурсивно получить только имена файлов (без расширений или путей к файлам).Это работало для меня в корневой папке:

dir /b

Но когда я добавил /s для рекурсивного сканирования, я также получил пути к файлам перед именами файлов, которые мне не нужны. Есть ли способ получить голые имена файлов из всех подпапок в каталоге?

Я на Windows 7 x64 Я бы предпочел использовать обычную командную строку, а не PS или VBS

3 ответа3

14

Используйте следующую команду:

dir /b /a /s
  • /b удаляет дату и другие подробности из вывода
  • /a выводит только имя файла, без путей
  • /s включает рекурсивный список каталогов

Если вам нужно сохранить вывод в файл, вы можете использовать:

dir /b /a /s >> list_of_names.txt

РЕДАКТИРОВАТЬ На самом деле вышеупомянутое решение не достигает целей исходного вопроса. Из этого вопроса я заметил одну вещь: пост требует рекурсивного перечисления. которого нет в другом ответе, поэтому я думаю, что добавление "/s" в ответе другого ответчика поможет

for /f %a in ('dir /b /s') do @echo %~na
5

Попробуй это:

for /f "delims=" %a in ('dir /b /s') do @echo %~na

Более подробную информацию о том, как работает и что он делает, введите for /?

2
for /r %i in (*) do @echo %~ni

или же

forfiles /s /c "cmd /c if @isdir==FALSE noquotes.bat @fname"

предполагая файл noquotes.bat в вашем % PATH% с этим содержимым

@echo %~1

для / р подход объяснил

for /r рекурсивно обходит текущий каталог (вы можете указать каталог for /r drive:\path\ , текущий каталог предполагается) и выполняет команду, указанную do, для каждого файла, соответствующего в наборе (*) . Набор (.) Будет соответствовать только каталогам. @echo% ~ ni Эта команда работает как есть из приглашения. Удвойте свои кавычки, если вы поместите их в пакетный файл. т.е. for /r %%i in (*) do @echo %%~ni

объяснил подход forfiles

/s перечисляет текущий и все подкаталоги
/c выполняет команду внутри кавычек
@isdir и @fname - это символ, выдаваемый в командной строке
Дополнительный пакетный файл noquotes.bat помогает, удаляя двойные кавычки с% ~ 1 (параметр 1)
forfiles также позволяет указать путь для запуска в forfiles /P C:\Windows ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .