Пакетный файл для зацикливания файлов в папке и запуска Exe для информации - PullRequest
1 голос
/ 27 мая 2019

Я пишу * .BAT-файл для подсчета кадров в каждом GIF-файле в папке. Было бы неплохо записать все это в TXT-файлы, но я еще не дошел до этого.

Я могу сделать это из командной строки для отдельных файлов.

Это делает то, что я хочу, но не выводит количество кадров в окно. Следующая строка - пример того, что он должен делать для одного файла.

"c:\program files\ImageMagick-6.8.9-Q8\identify.exe" -format %%n 14215349.gif

Эти две строки должны делать то же самое для каждого файла в папке. Но они просто повторяют команду, а не показывают ее вывод.

set "frames=^0x22c:\program^ files\ImageMagick-6.8.9-Q8\identify.exe^0x22^ -format^ %%n"
forfiles /m *.gif /c "cmd /c echo %frames% @file"

Единственное, что я вижу неправильно, это двойные кавычки, но это показывает, что это не так:

"c:\program files\ImageMagick-6.8.9-Q8\identify.exe" -format %%n "14215349.gif"
pause

Должно быть выведено целое число для каждого файла. Строка 1 делает это. Строки 2 и 3 нет; они просто echo команда.

Ответы [ 2 ]

0 голосов
/ 27 мая 2019

Я бы предложил вам использовать что-то вроде этого:

@Echo Off
For %%K In (*.gif)Do If /I "%%~xK"==".gif" (
    "%ProgramFiles%\ImageMagick-6.8.9-Q8\identify.exe" -format "%%[n] %%[f]" "%%K"
)>>"FramesList.txt"

В приведенном выше примере я использовал %%K для безопасности, потому что нет кратких атрибутов формы, которые используют %K, и это отдельный символ, для целей распознавания . Кроме того, я решил использовать процентные атрибуты длинных атрибутов формы для числа изображений и имени файла, то есть %[n] и %[f], по той же причине , поскольку из пакетного файла %%n и %%f может быть перепутано с For метавариабельными .

Оператор If был включен, потому что *.gif не циклически просматривает файлы с расширениями .gif, он зацикливает все расширения, начинающиеся с .gif. Хотя у вас может не быть ни одного, соответствующего этому сценарию, нет реальной причины не добавлять дополнительную безопасность .

0 голосов
/ 27 мая 2019

Этот код работает:

for %%I in (*.gif) do "c:\program files\ImageMagick-6.8.9-Q8\identify.exe" -format %%n %%I >>FramesList.txt
pause

Спасибо.

Я надеюсь, что могу попросить еще одну вещь. Вывод, который я получаю, только целые числа, в одной строке, без пробелов в именах файлов. Как мне написать это так, чтобы файл FramesList.txt показывал целое число кадров (не более 3 цифр), за которым следовало имя файла в каждой строке?

...