Вот мое предложение для пакетного файла:
@echo off
rem A simple script to convert a png or jpg image sequence to an mp4 file with ffmpeg
cls
title PNG2MP4
color C
echo Ensure you have ffmpeg installed and setup in your environment variables
echo or this script won't work.
echo/
echo This will convert all image files in the following directory to a single mp4:
echo/
echo %cd%
echo/
%SystemRoot%\System32\choice.exe /C PJC /N /M "Are the files PNGs or JPEGs or Cancel (P/J/C)? "
if errorlevel 3 color & goto :EOF
echo/
if errorlevel 2 (
ffmpeg.exe -i %%04d.jpg out.mp4
) else (
ffmpeg.exe -i %%04d.png out.mp4
)
color
Символ %
должен быть экранирован в пакетном файле с еще одним %
, чтобы интерпретироваться как литеральный символ, который был главной проблемойв результате чего пакетный файл не работает должным образом.%0
ссылается на строку, использованную для запуска командного файла, которая была img2mp4.bat
.Таким образом, %04d.jpg
привел к объединению img2mp4.bat
с 4d.jpg
, и результат выполнялся ffmpeg.exe
с img2mp4.bat4d.jpg
в качестве имени файла вместо строки аргумента %04d.jpg
.
Для ссылки на один или несколько файловПапки / folder в текущей директории могут быть просто указаны в списке аргументов скрипта или приложения без указания пути.Это объясняется в статье Microsoft о Именовании файлов, путей и пространств имен .Далее в этой статье описывается, что в Windows разделителем каталогов является символ обратной косой черты \
, а не косая черта /
, как в Linux и Mac./
используется в Windows в основном для параметров, поскольку его можно увидеть в строке с командой CHOICE , поскольку этот символ невозможен в именах файлов / папок.-
используется в Linux / Mac для параметров, которые также возможны в именах файлов / папок, даже в качестве первого символа имени файла / папки.Поэтому в Windows \
всегда следует использовать в качестве разделителя каталогов, хотя функции ядра Windows для доступа к файловой системе автоматически корректируют /
в именах файлов / папок на \
.
CHOICE гораздо лучше предложить пользователю сделать выбор из нескольких предложенных опций, чем SET с опцией /P
.set/p
синтаксически не совсем корректен, поскольку команда set
отделена пробелом от опции /P
, отделена пробелом от следующего аргумента variable=prompt text
.set/p
заставляет cmd.exe
автоматически исправить командную строку на set /p
.Пакетные файлы должны иметь синтаксически правильную кодировку и не зависеть от автоматических исправлений командного процессора Windows.
Для понимания используемых команд и их работы откройте окно командной строки, выполните там следующие команды и полностью прочитайте всестраницы справки для каждой команды отображаются очень тщательно.
call /?
... объясняет, как ссылаться на аргументы пакетного файла. echo /?
rem /?
cls /?
title /?
color /?
set /?
choice /?
if /?
goto /?
Далее я предлагаю прочитать: