PDA

Показать полную графическую версию : [решено] Два файла - как одна переменная, переменная - как параметр


taravasya
15-02-2010, 20:23
Не знаю даже как объяснить...
1)Возможно ли передать значение переменной - как параметр для другого приложения? При том что этот параметр не задуман как переменная...
2)Возможно ли два файла с одинаковым именем, но с разным расширением, задать как одну переменную? При этом самих пар этих файлов может быть несколько. то-есть видимо потребуется ещё и цикл назначения переменных.
3)Создать цикл внутри другого цикла?
Постараюсь объяснить.
Есть программа CinemaCraft Encoder
Она перекодирует видео из AVI в два отдельных(аудио и видео) mpeg файла
С этим проблем нет.
Есть консольная программа mplex.exe
Она склеивает видео mpeg файл и аудио mpeg файл в один, совместимый с DVD-video, аудио-видео mpeg файл.
Для запуска этой проги набирается команда:
mplex -F 8 -O 001.mpg 001.m2v 001.mpa
(где:
-F 8 параметр указывающий на то, что выходной файл, должен быть совместим с DVD-video
-O 001.mpg имя выходного файла
001.m2v 001.mpa имена фалов источников)
Задача:
К примеру я перекодирую определённое кол-во AVI файлов, с помощью CinemaCraft в одну папку:
Получаю в этой папке:
Иванова.m2v
Иванова.mpa
Петрова.m2v
Петрова.mpa
Для начала я попытался сделать вот такое:


set parametr = Иванова.mpg Иванова.m2v Иванова.mpa
set mplx = mplex.exe -f 8 -o %parametr%
for %%f in (*.m2v) do %mplx %%f
Тут я задал имеющиеся файлы как переменную, и попытался по-быстрому проверить передачу этой переменной как параметр для mplex

В результате получил такую команду:
mplex.exe -f 8 -o parametrf
Понятное дело из этого ничего не выходит.
Вот собственно и первый вопрос:
Возможно ли передать значение переменной - как параметр для другого приложения? При том что этот параметр не задуман как переменная...

С остальными вопросам, пока промолчу. Если найдётся ответ на этот, то остальные есть вверху сообщения.

taravasya
15-02-2010, 22:08
Попробовал задать переменную командой для ввода данных пользователем:
set /P var=[input names]
вместо
set parametr = Иванова.mpg Иванова.m2v Иванова.mpa
Так сработало. То-есть видимо я допускаю ошибку именно в составлении выражения. Наверное путаюсь со знаками %%, Их расположение я просто передрал с другого выражения. Видимо не подходит...

О! Одну ошибку определил
Я ставил ненужные пробелы....
Соответственно выяснил, что переменную как параметр для другого приложения задать можно. Правильно писать так:
set parametr=Иванова.mpg Иванова.m2v Иванова.mpa
set mplx=mplex.exe -f 8 -o
for %%f in (*.m2v) do %mplx %%f% %parametr%

taravasya
16-02-2010, 03:18
Ну пожалуйста подскажите кто-нибудь....
Собственно я на 90% решил задачу. Уж простят меня модераторы, получается диалог сам с собой, но и он мне видимо помогает...
Во общем делаю так:
echo off
set mx=mplex.exe -f 8 -o
set demuxfld=f:\demuxed
set demuxvfls=*.mpv
set demuxafls=*.mpa
for %%v in (%demuxfld%\%demuxvfls%) do %mx% %%~nv%%..mpg %%v%
В итоге получаю правильный mpg со всех источников, но только с видео!.
А от куда же взяться аудио если его нет в цикле?
Как правильно запихнуть ещё один цикл - внутрь текущего?
Либо как заполучить две переменных в одном цикле?
Елси я делаю так:
echo off
set mx=mplex.exe -f 8 -o
set demuxfld=f:\demuxed
set demuxvfls=*.mpv
set demuxafls=*.mpa
for %%v in (%demuxfld%\%demuxvfls%) do (
%%v for %%a in (%demuxfld%\%demuxafls%) do (
%mx% %%~nv%%..mpg %%v%
)
То получаю - непредвиденное появление do

amel27
16-02-2010, 03:40
если из текущего каталога, то где-то так:
For %%i In (*.m2v) Do mplex.exe -f 8 -o %%~ni.mpg %%~ni.m2v %%~ni.mpa

taravasya
16-02-2010, 04:06
Блин!!! Как всё просто! Спасибо.
Залогом являются одинаковые имена и аудио и видео файлов?
Получается мы как бы обманываем интерпретатор?
Он считая что берёт всё ту же %%i, подхватывает и аудио, благодаря тому, что %%i мы развернули только в имя файла, без расширения?!! Гениально!
И главное проколов не будет, потому как, имя и у аудио и у видео всегда одинаковы(только если специально их переименовать)
Вот спасибо....
Я пока не буду помечать тему решённой, потому как мне предстоит решить ещё один вопрос, напрямую касающийся этих.
Но надеюсь что справлюсь. И тогда помечу решённой.
Еще раз спасибо.
PS
В итоге выглядит так:
set mx=mplex.exe -f 8 -o
set demuxfld=f:\demuxed
set remuxfld=f:\remuxed
for %%v in (%demuxfld%\*.mpv) do %mx% %remuxfld%\%%~nv.mpg %demuxfld%\%%~nv.mpv %demuxfld%\%%~nv.mpa

amel27
16-02-2010, 04:36
Получается мы как бы обманываем интерпретатор? »
почему обманываем?.. собственно, так и задумано:
FOR /?

taravasya
16-02-2010, 04:49
FOR /? »
Эх... Сколько раз перечитал. А главного не уловил. Опыта мало совсем. Практически нет.




© OSzone.net 2001-2012