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


265

Як ви повторюєте кожен файл у каталозі з файлом .bat або .cmd?

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

Відповіді:


348

Використання командного рядка:

for /f %f in ('dir /b c:\') do echo %f

Використання пакетного файлу:

for /f %%f in ('dir /b c:\') do echo %%f

Оновлення : якщо каталог містить файли з пробілом в іменах, вам потрібно змінити роздільник, який використовує for /fкоманда. наприклад, ви можете використовувати трубопровід.

for /f "delims=|" %%f in ('dir /b c:\') do echo %%f

Оновлення 2 : (швидкий півтора року після оригінальної відповіді :-)) Якщо саме ім’я каталогу має пробіл у назві, ви можете скористатися usebackqопцією на for:

for /f "usebackq delims=|" %%f in (`dir /b "c:\program files"`) do echo %%f

І якщо вам потрібно використовувати переадресацію виводу або конвеєрне командування, скористайтеся командою escape char ( ^):

for /f "usebackq delims=|" %%f in (`dir /b "c:\program files" ^| findstr /i microsoft`) do echo %%f

3
Принаймні для деяких команд файлова змінна повинна бути укладена у подвійні лапки.
Jirka

1
Чому це /fпотрібно після for? Відповідно до довідкових документів, /fпрапор відкривається та читається кожен файл. Це потрібно для відлуння або перейменування файлів?
Снексе

17
/fПісля FORобмежує його файли. Аналогічно /dобмежує каталоги (папки) і /rвказує на те, що вони мають рекурсивний характер.

3
+1 Це жива відповідь, до якої постійно відвідують; велике дякую.
Сабунку

4
Щойно зрозумів, що ти повинен використовувати зворотні цитати ... Замість 'dir /b "c:\program files"'цього має бути`dir /b "c:\program files"`
endavid

101

Крім того, використовуйте:

forfiles /s /m *.png /c "cmd /c echo @path"

Команда forfiles доступна в Windows Vista та новіших версіях.


1
було важко використовувати шляхи з пробілами в оболонці 2-го cmd. Врешті-решт я скоригував% PATH% env var, щоб виконати роботу. Але спасибі корисно
twobob

70

Найпростіший метод:

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

for %f in (*.*) do echo %f

З пакетного файлу (подвоєння знаків% відсотків):

for %%f in (*.*) do echo %%f

З пакетного файлу з папкою, вказаною як 1-й параметр:

for %%f in (%1\*.*) do echo %%f

8
не просто найпростіше, але й значно елегантніше порівняно з оцінкою dir /Bрезультатів for.
syneticon-dj

5
Додайте а / р перед% f, щоб повторити підкаталоги
PRMan

35

Використовуйте

for /r path %%var in (*.*) do some_command %%var

з:

  • шлях є вихідним шляхом.
  • %% var є ідентифікатором.
  • *. * будучи маскою файлів АБО вмістом змінної.
  • some_command - це команда для виконання з контуром, який містить параметри та шлях.

2
Я отримую помилку: %%var was unexpected at this time.Ви можете навести точний приклад? Я спробував купу варіаційfor /r . %%var in (*.*) do echo %%var
hippietrail

3
З якоїсь дивної причини ім'я змінної обмежено одним символом.
ollb

2
Чи можемо ми використовувати різні смайлики для різних результатів?
Silver Quettier


-1

У мене було деяке зловмисне програмне забезпечення, яке позначило всі файли в каталозі як приховані / системні / лише для читання. Якщо хтось ще опинився в цій ситуації, введіть в каталог і запустіть for /f "delims=|" %f in ('forfiles') do attrib -s -h -r %f.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.