Войти

Показать полную графическую версию : Комментарий внутри цикла FOR


Страниц : [1] 2

Sisin
18-12-2017, 11:21
Как сделать, чтобы комментарий в цикле 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
18-12-2017, 11:30
Sisin, имхо, двоеточие- это метка, а комментарий начинается rem c пробелом »
с rem тоже не работает.

Iska
18-12-2017, 11:41
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"
)
И с чего бы ей исполняться?!

Sisin
18-12-2017, 12:18
А можно как-то извратиться, чтобы аргументы для ffmpeg.exe передавались построчно, но так, чтобы между строчек можно было бы вставлять комментарии???

Iska
18-12-2017, 12:39
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

Sisin
18-12-2017, 12:55
Я так понимаю, Вы комментарии вставляете не из любви к искусству, а для памяти, дабы не запоминать имена параметров, и за что каждый из них отвечает, да? »

Да, но дело в том, что два параметра я могу запомнить (я их указал в качестве примера для 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

Iska
18-12-2017, 13:18
Мне удобнее было бы не удалять строчки, а отключать. »
Как я Вас понимаю :). Но увы, фокус не удастся. Максимум, что Вы можете сделать — формировать командную строку отдельно, наподобие:
@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 и не мучаться, не?!

Sisin
18-12-2017, 13:39
P.S. Может, Вам проще будет взять одну из многочисленных GUI-оболочек для ffmpeg.exe и не мучаться, не?! »

Просто полный скрипт еще больше, а в нем используется 4 программы. GUI-оболочка не поможет, вернее поможет, но их будет 4, плюс ненужные телодвижения.

Iska
18-12-2017, 13:45
Ну, тогда так:
формировать командную строку отдельно, »
попробуйте, может сгодится.

Sisin
18-12-2017, 13:57
попробуйте, может сгодится. »

Iska
18-12-2017, 14:15
Sisin, ?!

Sisin
18-12-2017, 14:22
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 перед вызовом Ваших программ написал для отладки, так как их у меня нет.

Sisin
19-12-2017, 12:09
Вам надо извращений? Их есть у меня! :) »

Сударь, Вы знаете толк в извращениях)))

Sisin
19-12-2017, 13:15
@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 как мне надо, иначе ошибка.
Можно ли как-то выкрутиться??

Iska
19-12-2017, 13:35
я не могу назвать файл bat как мне надо »
А как Вам надо?

иначе ошибка. »
Какая?

Sisin
19-12-2017, 13:45
А как Вам надо? »

1 - MKV, MP4, WMV to MKV (COPY2).bat

Какая? »

Непредвиденное появление: .bat""'>.

Iska
19-12-2017, 14:12
Sisin, попробуйте не использовать круглых скобок в имени пакетного файла.

Sisin
19-12-2017, 14:27
Sisin, попробуйте не использовать круглых скобок в имени пакетного файла. »

Помогло. Заменил на квадратные. Работает. А чем это вызвано??




© OSzone.net 2001-2012