Цикл командной строки для запуска команды для всех файлов в каталоге (плюс подкаталоги, если это возможно)

14

Я предполагаю, что это довольно легко сделать, но у меня нет опыта работы с утилитами командной строки Windows. По сути, мне нужно перебрать все файлы в каталоге (отлично, если он может создавать подкаталоги, но я могу запустить его в каждом из 5 каталогов, если это необходимо), получить имя в виде переменной и запустить его

"C:\Program Files\ImageMagick-6.7.6-Q16\convert.exe" -compress LZW 
   -colorspace Gray -colors 32 file_var file_var

Я видел динамически именовать файлы в командной строке для цикла . Смогу ли я использовать это (поменять местами SET ... с помощью приведенной выше команды)? Пространство на рассматриваемом компьютере не ограничено, поэтому я не могу выполнить резервное копирование перед запуском этого этапа (я знаю, что это плохо).

Роберт
источник
Роберт, если вам удалось ответить на свой вопрос, пожалуйста, добавьте свой ответ и примите его как правильный.
Джулиан Найт
Я не думаю, что это именно то, что вы хотите, конец it ( "%%f" "%%f") просто поместит имя файла (с полным путем) дважды. Вы, вероятно, хотите использовать что-то вроде "%%f" "%%~dpnf.gif"изменения расширения выходного файла.
Synetech
@JulianKnight - спасибо, я на самом деле пытался вернуться, когда, но я думаю, что было вынуждено ждать, чтобы сделать это. Вид забыл про вопрос с тех пор.
Роберт

Ответы:

13

Странно, был ответ, который имел рекурсивную часть.

Что ж, согласно « Как перебирать файлы, соответствующие шаблону в Batch File» , я смог добиться этого. Вот как это было выполнено:

 cd path_to_root
 for /R %%f in (*.tif) do (
 "C:\Program Files\ImageMagick-6.7.6-Q16\convert.exe" -compress LZW 
    -colorspace Gray -colors 32 "%%f" "%%f"
 )
Роберт
источник
5

Откройте PowerShell

$files = Get-ChildItem -Recurse 
foreach ($file in $files){
    c:\windows\System32\notepad.exe $file.FullName
}

Get-ChildItem извлекает список файлов в виде объектов из текущего подкаталога. «-recurse» будет включать подкаталоги. Это помещает его в массив $ Files.

Цикл foreach циклически просматривает каждый файл и вызывает блокнот с аргументом командной строки, указав полный путь к имени файла для каждого файла.

ВНИМАНИЕ. Протестируйте приведенный выше код в каталоге с несколькими небольшими текстовыми файлами, поскольку он откроет экземпляр Блокнота для каждого файла.

Это должно дать вам представление о том, что вы собираетесь делать.

до свидания
источник