Отримуйте голі імена файлів рекурсивно в командному рядку


19

Я зіткнувся з маленьким корчем, намагаючись отримати тільки імена файлів (без розширень чи шляхів до файлів) рекурсивно. Це працювало для мене в кореневій папці:

dir /b

Але коли я додав / с для сканування рекурсивно, я також отримав шляхи до файлів до імен файлів, яких я не хочу. Чи є спосіб отримати голі імена файлів з усіх папок у каталозі?

Я під Windows 7 x64, я б скоріше використовував звичайний командний рядок, а не PS чи VBS

Відповіді:


15

Використовуйте таку команду:

dir /b /a /s
  • / b знімає дату та інші деталі з результату
  • / a виводить лише ім'я файлу, без шляхів
  • / s вмикає рекурсивний перелік каталогів

Якщо вам потрібно зберегти вихід у файл, ви можете використовувати:

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

EDIT Насправді вищезазначене рішення не досягає початкових цілей питання. Одне, що я помітив із запитання, - це те, що публікація запитує рекурсивний перелік. якої не вистачає іншої відповіді, тому я думаю, що додавання "/ s" у відповідь іншого відповіді зробить трюк

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

Чи можете ви пояснити це? Для мене це мало сенсу.
Саймон Шихан

4
Це не працює, / не працює так - це фільтр для того, який тип файлів ви хочете внести до списку. Він не знімає шлях від імені файлу, коли робиться рекурсивний перелік каталогів.
Гафф

відредагував відповідь; і я знову взяв руки на вікно вікна, я думаю, що цього разу слід це зробити (win732bit)
Nik So

6

Спробуйте це:

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

Введіть докладнішу інформацію про те, як працює і що це робиться for /?


Це майже працює, але є велика проблема. Він виводить лише перше слово імені файлу. Якщо ім'я файлу, наприклад, "моє зображення відпустки 1", воно виводить лише "мій"
TMRW

спробуйте це: for / f "delims = |" % a in ('dir / b') робити @echo% ~ na. За замовчуванням параметр / f FOR буде токенізуватися на пробіли. Якщо встановити маркер символу, який не повинен відображатися в іменах файлів / директорій, ви отримаєте все ім'я, включаючи пробіли.
Скотт Маккінні

Якщо ви хочете, щоб вихід був відправлений у файл, додайте>> filename.txt
Gruber

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

або

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

припускаючи файл noquotes.batу вашому % PATH% із цим вмістом

@echo %~1

для / r підхід пояснено

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 ...


@DavidPostill так, це була погана відповідь. Дякуємо за ваші коментарі. Будь ласка, дайте мені знати, чи можу я далі вдосконалити свою відповідь.
JJS

@DavidPostill у вас немає попередньої відповіді чи коментаря. Ви модерували питання, чи шукали відповіді та натикалися на мою відповідь низької якості?
JJS

Ваша відповідь вискакувала у черзі оглядів "Повідомлення низької якості". Оскільки я багато знаю про пакетні файли, я дуже уважно ознайомився з цим.
DavidPostill

@DavidPostill дякую за Ваш відгук. Я вітаю ваш огляд змін, які я внесла до своєї відповіді.
JJS

Набагато краще ... :)
DavidPostill

-1

Список усіх файлів, голий, рекурсивно, використовуючи атрибути (не каталог) (лише файли)

dir / B / S / A: -D

C: \ test \ cache> dir / B / S / A: -D

C: \ test \ cache \ 7 \ 0f \ 7b50ed0522645513da90345120eaf0f7 C: \ test \ cache \ d \ 23 \ 814644aa6a8195c91e54d2f7bb64e23d


У запитанні йдеться про те, що ОП «намагається отримати лише імена файлів (без розширень чи шляхів до файлів). … Але коли я [спробував dir /b /s] сканувати рекурсивно, у мене також з’явилися шляхи до файлів до імен файлів, чого я не хочу. що це дає той самий результат, що і тоді, коли ОП його спробували (тобто не те, що вони хочуть).
Скотт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.