Показать полную графическую версию : Комментарий внутри цикла FOR
Как сделать, чтобы комментарий в цикле FOR не мешал работе:
for %%a in (*.mkv;*.mp4;*.wmv) do (
ffmpeg -i "%%~a" ^
-c:v copy ^
-c:a copy ^
:: Начало обрезки:
:: -ss 00:08:38 ^
:: Продолжительность обрезки:
:: -t 00:05:00 ^
"fix\%%~na.mkv"
)
т.е. я не хочу удалять строки, а лишь убрать из цикла для моего удобства.
megaloman
18-12-2017, 11:28
Sisin, имхо, двоеточие- это метка, а комментарий начинается rem c пробелом
Sisin, имхо, двоеточие- это метка, а комментарий начинается rem c пробелом »
с rem тоже не работает.
Sisin, комментарии не могут располагаться внутри строки команд. А у Вас, как было верно замечено, даже не комментарии. Впрочем, если бы были и комментарии — то тоже не могут. Уберите переносы и что выйдет?
for %%a in (*.mkv;*.mp4;*.wmv) do (
ffmpeg.exe -i "%%~a" -c:v copy -c:a copy :: Начало обрезки::: -ss 00:08:38 :: Продолжительность обрезки::: -t 00:05:00 "fix\%%~na.mkv"
)
И с чего бы ей исполняться?!
А можно как-то извратиться, чтобы аргументы для ffmpeg.exe передавались построчно, но так, чтобы между строчек можно было бы вставлять комментарии???
Sisin, это не между строчек, понимаете? Это внутри одной строки. Никак Вы не вставите комментарий внутрь команды.
Я так понимаю, Вы комментарии вставляете не из любви к искусству, а для памяти, дабы не запоминать имена параметров, и за что каждый из них отвечает, да? Тогда предлагаю воспользоваться, например, следующим способом:
@echo off
setlocal enableextensions enabledelayedexpansion
rem Начало обрезки:
set sStartTime=00:08:38
rem Продолжительность обрезки:
set sPeriod=00:05:00
for %%a in (*.mkv;*.mp4;*.wmv) do (
ffmpeg.exe ^
-i "%%~a" ^
-c:v copy ^
-c:a copy ^
-ss %sStartTime% ^
-t %sPeriod% ^
"fix\%%~na.mkv"
)
endlocal
exit /b 0
Я так понимаю, Вы комментарии вставляете не из любви к искусству, а для памяти, дабы не запоминать имена параметров, и за что каждый из них отвечает, да? »
Да, но дело в том, что два параметра я могу запомнить (я их указал в качестве примера для ffmpeg) )))
Вот другой НЕРАБОТАЮЩИЙ пример:
for %%a in (fix\*.mkv) do (
::Настройка по умолчанию для 1 видео и 1 аудио дорожек
mkvmerge -o "fixed\%%~nxa" ^
rem Распознавание дорожек:
rem -d 0 -a 1,2 -s 3
-d 0 a 1 -S -T ^
--track-name 0:"" ^
--track-name 1:"" ^
rem--track-name 2:"" ^
--language 0:und ^
--language 1:rus ^
rem --language 2:rus ^
--default-track 0:yes ^
--default-track 1:yes ^
rem --default-track 2:no ^
--forced-track 0:no ^
--forced-track 1:no ^
rem --forced-track 2:no ^
--compression 0:none ^
--compression 1:none ^
rem --compression 2:none ^
--title "" ^
rem Очередность дорожек:
rem --track-order 0:0,0:1,0:2,0:3
--track-order 0:0,0:1 ^
--no-global-tags ^
--no-chapters ^
--disable-track-statistics-tags ^
"%%~a"
)
Мне удобнее было бы не удалять строчки, а отключать.
Сейчас у меня комментарии расположены отдельно и приходится их переносить с места на место.
for %%a in (fix\*.mkv) do (
::Настройка по умолчанию для 1 видео и 1 аудио дорожек
mkvmerge -o "fixed\%%~nxa" ^
-d 0 a 1 -S -T ^
--track-name 0:"" ^
--track-name 1:"" ^
--language 0:und ^
--language 1:rus ^
--default-track 0:yes ^
--default-track 1:yes ^
--forced-track 0:no ^
--forced-track 1:no ^
--compression 0:none ^
--compression 1:none ^
--title "" ^
--track-order 0:0,0:1 ^
--no-global-tags ^
--no-chapters ^
--disable-track-statistics-tags ^
"%%~a"
)
rem -d 0 -a 1,2 -s 3
rem -d 0 a 1 -S -T
rem --track-name 0:""
rem --track-name 1:""
rem--track-name 2:""
rem --language 0:und
rem --language 1:rus
rem --language 2:rus
rem --default-track 0:yes
rem --default-track 1:yes
rem --default-track 2:no
rem --forced-track 0:no
rem --forced-track 1:no
rem --forced-track 2:no
rem --compression 0:none
rem --compression 1:none
rem --compression 2:none
rem --title ""
rem --track-order 0:0,0:1,0:2,0:3
rem --track-order 0:0,0:1
rem --no-global-tags
rem --no-chapters
rem --disable-track-statistics-tags
Мне удобнее было бы не удалять строчки, а отключать. »
Как я Вас понимаю :). Но увы, фокус не удастся. Максимум, что Вы можете сделать — формировать командную строку отдельно, наподобие:
@echo off
setlocal enableextensions enabledelayedexpansion
set sArguments=
rem Начало обрезки:
set sArguments=%sArguments% -ss 00:08:38
rem Продолжительность обрезки:
set sArguments=%sArguments% -t 00:05:00
for %%a in (*.mkv;*.mp4;*.wmv) do (
ffmpeg.exe ^
-i "%%~a" ^
-c:v copy ^
-c:a copy ^
%sArguments% ^
"fix\%%~na.mkv"
)
endlocal
exit /b 0
и при нужде Вы просто комментируете/раскомментируете тот или иной аргумент.
P.S. Может, Вам проще будет взять одну из многочисленных GUI-оболочек для ffmpeg.exe и не мучаться, не?!
P.S. Может, Вам проще будет взять одну из многочисленных GUI-оболочек для ffmpeg.exe и не мучаться, не?! »
Просто полный скрипт еще больше, а в нем используется 4 программы. GUI-оболочка не поможет, вернее поможет, но их будет 4, плюс ненужные телодвижения.
Ну, тогда так:
формировать командную строку отдельно, »
попробуйте, может сгодится.
попробуйте, может сгодится. »
Sisin, ?! »
Глупость написал. Думал можно каретке указать не читать следующую строку.
megaloman
18-12-2017, 20:22
А можно как-то извратиться » @Echo Off
cls
SetLocal EnableExtensions EnableDelayedExpansion
Call :Parameters ":Inmkvmerge" "Pmkv"
For %%a in (fix\*.mkv) do Echo mkvmerge -o "fixed\%%~nxa"%Pmkv% "%%~a"
Call :Parameters ":Inffmpeg" "Pffm"
for %%a in (*.mkv;*.mp4;*.wmv) Do Echo ffmpeg -i "%%~a"%Pffm% "fix\%%~na.mkv"
pause
GoTo :Eof
:Parameters
For /F "usebackq tokens=1* delims=:" %%a In (`"FINDSTR /B /L /I /N /C:%1 "%~dpnx0""`) DO Set /A Nbeg=%%a
Set "%~2="
For /F "usebackq tokens=1,* delims=~" %%a In (`"more +%Nbeg% "%~dpnx0""`) DO (
If /I "%%a"=="GoTo :Eof" GoTo :Eof
If Not "%%a"==":" Set "%~2=!%~2! %%a"
)
GoTo :Eof
:Inffmpeg
-c:v copy
-c:a copy
:~ Начало обрезки:
:~ -ss 00:08:38
:~ Продолжительность обрезки:
:~-t 00:05:00
GoTo :Eof
:Inmkvmerge
:~Настройка по умолчанию для 1 видео и 1 аудио дорожек
:~ Распознавание дорожек:
:~-d 0 -a 1,2 -s 3
-d 0 a 1 -S -T
--track-name 0:""
--track-name 1:""
:~--track-name 2:""
--language 0:und
--language 1:rus
:~--language 2:rus
--default-track 0:yes
--default-track 1:yes
:~--default-track 2:no
--forced-track 0:no
--forced-track 1:no
:~--forced-track 2:no
--compression 0:none
--compression 1:none
:~--compression 2:none
--title ""
:~ Очередность дорожек:
:~--track-order 0:0,0:1,0:2,0:3
--track-order 0:0,0:1
--no-global-tags
--no-chapters
--disable-track-statistics-tags
GoTo :Eof
Идея работы:
Перечислить все параметры построчно в отдельной секции и на их основе сформировать строку параметров.
Я придумал для секции способ комментирования: символы :~
Сначала вызываем формирование параметров, а затем уже цикл по вашим файлам.
Echo перед вызовом Ваших программ написал для отладки, так как их у меня нет.
Вам надо извращений? Их есть у меня! :) »
Сударь, Вы знаете толк в извращениях)))
@Echo Off
md fix
cls
SetLocal EnableExtensions EnableDelayedExpansion
Call :Parameters ":Inffmpeg" "Pffm"
for %%a in (*.mkv;*.mp4;*.wmv) do ffmpeg -i "%%~a"%Pffm% "fix\%%~na.mkv"
Call :Parameters ":Inmkvmerge" "Pmkv"
for %%a in (fix\*.mkv) do mkvmerge -o "fixed\%%~nxa"%Pmkv% "%%~a"
del /q fix
rd /q fix
pause
GoTo :Eof
:Parameters
For /F "usebackq tokens=1* delims=:" %%a In (`"FINDSTR /B /L /I /N /C:%1 "%~dpnx0""`) DO Set /A Nbeg=%%a
Set "%~2="
For /F "usebackq tokens=1,* delims=~" %%a In (`"more +%Nbeg% "%~dpnx0""`) DO (
If /I "%%a"=="GoTo :Eof" GoTo :Eof
If Not "%%a"==":" Set "%~2=!%~2! %%a"
)
GoTo :Eof
:Inffmpeg
-c:v copy
-c:a copy
:~ Начало обрезки:
:~ -ss 00:08:38
:~ Продолжительность обрезки:
:~ -t 00:05:00
GoTo :Eof
:Inmkvmerge
:~ Настройка по умолчанию для 1 видео и 1 аудио дорожек
:~ Распознавание дорожек:
:~ -d 0 -a 1,2 -s 3
-d 0 -a 1 -S -T
--track-name 0:""
--track-name 1:""
:~ --track-name 2:""
--language 0:und
--language 1:rus
:~ --language 2:rus
--default-track 0:yes
--default-track 1:yes
:~ --default-track 2:no
--forced-track 0:no
--forced-track 1:no
:~ --forced-track 2:no
--compression 0:none
--compression 1:none
:~ --compression 2:none
--title ""
:~ Очередность дорожек:
:~ --track-order 0:0,0:1,0:2,0:3
--track-order 0:0,0:1
--no-global-tags
--no-chapters
--disable-track-statistics-tags
GoTo :Eof
Есть одно НО, я не могу назвать файл bat как мне надо, иначе ошибка.
Можно ли как-то выкрутиться??
я не могу назвать файл bat как мне надо »
А как Вам надо?
иначе ошибка. »
Какая?
А как Вам надо? »
1 - MKV, MP4, WMV to MKV (COPY2).bat
Какая? »
Непредвиденное появление: .bat""'>.
Sisin, попробуйте не использовать круглых скобок в имени пакетного файла.
Sisin, попробуйте не использовать круглых скобок в имени пакетного файла. »
Помогло. Заменил на квадратные. Работает. А чем это вызвано??
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.