Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Два файла - как одна переменная, переменная - как параметр (http://forum.oszone.net/showthread.php?t=167460)

taravasya 15-02-2010 20:23 1347909

Два файла - как одна переменная, переменная - как параметр
 
Не знаю даже как объяснить...
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 1348017

Попробовал задать переменную командой для ввода данных пользователем:
Код:

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 1348229

Ну пожалуйста подскажите кто-нибудь....
Собственно я на 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 1348235

если из текущего каталога, то где-то так:
Код:

For %%i In (*.m2v) Do mplex.exe -f 8 -o %%~ni.mpg %%~ni.m2v %%~ni.mpa

taravasya 16-02-2010 04:06 1348243

Блин!!! Как всё просто! Спасибо.
Залогом являются одинаковые имена и аудио и видео файлов?
Получается мы как бы обманываем интерпретатор?
Он считая что берёт всё ту же %%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 1348247

Цитата:

Цитата taravasya
Получается мы как бы обманываем интерпретатор? »

почему обманываем?.. собственно, так и задумано:
Код:

FOR /?

taravasya 16-02-2010 04:49 1348250

Цитата:

Цитата amel27
FOR /? »

Эх... Сколько раз перечитал. А главного не уловил. Опыта мало совсем. Практически нет.


Время: 14:55.

Время: 14:55.
© OSzone.net 2001-