PDA

Показать полную графическую версию : [решено] запуск *.exe с параметром "y" с помощью батника


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

sharky lions
17-04-2011, 14:53
имеется:
For /R C:\Users\admin\Desktop\Gen\ %%I In (*.exe) Do Start /Wait "" "%%I"
он рабочий, но есть проблемка, все эти *.exe являются SFX архивами и их надо запустить с параметром /y
а также назначить им рабочую папку C:\Users\admin\Desktop\unpack_Gen\

пробовал
For /R C:\Users\admin\Desktop\Gen\ %%I In (*.exe) Do Start /Wait "" "%%I" /y
For /R C:\Users\admin\Desktop\Gen\ %%I In (*.exe) Do Start /Wait "" "%%I" "/y"
не помогает


____________________________________________________________________________________________________ _______________
решение задачи от gora и amel27:
на основе варианта от gora:
For /R C:\Users\admin\Desktop\Gen\ %%I In (*.exe) Do (
Echo A|Start "" /D "C:\Users\admin\Desktop\unpack_Gen\" /B /Wait "%%~I"
) »

gora
17-04-2011, 15:22
их надо запустить с параметром /y
а также назначить им рабочую папку C:\Users\admin\Desktop\unpack_Gen\ »Попробуйте так:
For /R C:\Users\admin\Desktop\Gen\ %%I In (*.exe) Do Start /Wait "" /D"C:\Users\admin\Desktop\unpack_Gen" "%%~I /y"

amel27
17-04-2011, 15:30
Попробуйте так: »что-то подсказывает, что под "рабочим" имелся ввиду каталог, куда извлекать архивы ;)

sharky lions
17-04-2011, 16:41
gora, спасибо - путь работает, но ключик "/y" по прежнему игнорится...

amel27, для SFX архива это одно и тоже, если при запаковке не было указано иное (можно указать путь разархивации, который будет применяться автоматически не зависимо от расположения архива при его запуске, при открытии например винраром, можно задать путь разархивации даже для SFX архива) в данном случае не важно архив это или нет... проблема в том что запускались все EXE-шники по месту расположения bat файла

gora
17-04-2011, 18:51
для SFX архива это одно и тоже, »
Боюсь Вас расстроить, но это не верное утверждение.
Рабочая директория ни как не влияет на папку распаковки, например, 7z SFX архива (на базе модифицированного модуля). Папка распаковки указывается в файле конфигурации. Если даже она там не указана, то папкой рапаковки будет временная папка, но не рабочая директория.
Типов SFX архивов достаточно много и все они ведут себя по разному. Обязательно указывайте тип SFX о котором Вы ведете речь.но ключик "/y" по прежнему игнорится... »
Я не имею этих SFX, ни чего не знаю о них (даже их тип неизвестен) и не знаю о назначении указанного ключа. А может он и не должен ни чего делать?
Попробуйте написать строку запуска Вашего SFX с указанным ключом без цикла и Start и добится правильной работы ключа -y

zero55
17-04-2011, 18:55
start /wait "cmd /c command"

CyberDaemon
17-04-2011, 19:39
echo /y | команда

?

sharky lions
17-04-2011, 20:20
Цитата sharky lions:
для SFX архива это одно и тоже, »
Боюсь Вас расстроить, но это не верное утверждение.
Рабочая директория ни как не влияет на папку распаковки, например, 7z SFX архива (на базе модифицированного модуля). Папка распаковки указывается в файле конфигурации. Если даже она там не указана, то папкой рапаковки будет временная папка, но не рабочая директория.
Типов SFX архивов достаточно много и все они ведут себя по разному. Обязательно указывайте тип SFX о котором Вы ведете речь. »

ну вопервых "модификация" и стандарт потому и различаются ;) во вторых зависит от выбранного типа управления архивацией чем более современная версия архиватора тем больше вероятность наличия режима "умолчаний", и как правило без специального включения "про" опций, всё происходит по режиму "умолчаний", внимательно прочитай мой пост, я там об этом говорю, только не разжёвываю ;)

Цитата sharky lions:
но ключик "/y" по прежнему игнорится... »
Я не имею этих SFX, ни чего не знаю о них (даже их тип неизвестен) и не знаю о назначении указанного ключа. А может он и не должен ни чего делать?
Попробуйте написать строку запуска Вашего SFX с указанным ключом без цикла и Start и добится правильной работы ключа -y »

о том каким архиватором были созданы эти архивы я также не имею понятия ) может это не зип и не рар а какой-нить арж... всё что я знаю что это содержимое архивов с рубоарда внешний архив рар а что там дальше хэ его зэ....

Foreigner
17-04-2011, 21:22
sharky lions,
А откуда вы знаете про этот ключ?

sharky lions
17-04-2011, 21:25
кстати ключ "y" игнорируется не только здесь...

в первой моей теме
скрипт так же игнорит "/y" и дозаписывает только не существовавшие ранее файлы... может я что-то не так понимаю? требуется перезапись файлов при копировании/разархивации, по логике /y должен отвечать на все запросы о перезаписи ответом (Y)es...

прошу прощения подчёркнутое это бред! там была другая проблема )))

Foreigner
17-04-2011, 21:33
sharky lions,

Если требуется пользовательский ввод, то как уже посоветвали попробуйте так:

...) do echo y | "%%i"

Если нужно указать папку, то попробуйте ее создать и перейти в нее:

...) do (

2>nul md "C:\Path\To\Dir"
pushd "C:\Path\To\Dir"
echo y | "%%i"
popd

)

sharky lions
17-04-2011, 21:39
sharky lions,
А откуда вы знаете про этот ключ? »

когда-то во времена MS-DOS этот ключик отвечал на любой вопрос (Y)es

внутренний SFX архив тоже RAR[/q]



CyberDaemon, укажи плиз в какое место кода надо это вставить?

Foreigner
17-04-2011, 21:58
echo /y | команда

Это ничего не решит. Нужно:

echo y | команда

Но и здесь нет гарантии, что приложение примет ответ по конвейеру, а не будет ждать ввода с клавиатуры.

sharky lions
17-04-2011, 22:40
Foreigner, укажи плиз в какое место кода надо это вставить? методом изменения приведённого мною скрипта...

Foreigner
17-04-2011, 22:46
@echo off

for /r C:\Users\admin\Desktop\Gen\ %%i in (*.exe) do echo y | "%%i"

sharky lions
17-04-2011, 23:32
прости в этот код ))) For /R C:\Users\admin\Desktop\Gen\ %%I In (*.exe) Do Start /Wait "" /D"C:\Users\admin\Desktop\unpack_Gen" "%%~I"

к тому же я не втыкаю как приведённый тобою код будет обрабатывать exe-шники на сколько я знаю start тут обезателен, а /wait более чем желателен... наверное ты не обратил внимания, что батник обрабатывает все файлы расположенные по пути №1 (верно для обоих кодов) и запускает их в папке расположенной по пути №2 (верно для исправленного кода), запуск происходит последовательно, по факту завершения предыдущего процесса, что верно для SFX архивов, плюс ограничение одновременно запущеных процессов в командной среде ограничено 20-ю...

Foreigner
17-04-2011, 23:47
sharky lions,

а сколько я знаю start тут обезателен, а /wait более чем желателен...

Нет, в данном случае все будет выполняться последовательно. А про каталог я уже выше написал:

@echo off

pushd "C:\Users\admin\Desktop\unpack_Gen"

for /r C:\Users\admin\Desktop\Gen\ %%i in (*.exe) do echo y | "%%i"

popd

Но почему бы сначала не попробовать 'echo y| file.exe'. Может вообще не будет работать.

sharky lions
18-04-2011, 00:42
к тому же для процесса разархивации @echo off абсолютно необходимый элемент )) подумаешь не будешь знать работает скрипт или нет, есть ошибки или нет... нафик оно надо! ))) разархивится десяток архивов, а ещё пол сотни не нужны раз не разархивились )))


Foreigner, что собственно и требовалось доказать не работает ни как вообще)

Foreigner
18-04-2011, 07:11
sharky lions,

подумаешь не будешь знать работает скрипт или нет, есть ошибки или нет... нафик оно надо! )))

`@echo off' никак не влияет на stderr и stdout, для этого есть дескрипторы потоков. Только прячет служебный мусор -- сами команды в промпте.

что собственно и требовалось доказать не работает ни как вообще

Значит не судьба, вбивай "Y" руками или с помощью какой-нибудь кнопконажималки.

PS. Попробуй с помощью файла ответов:

1>answer.txt echo y
"file.exe" < answer.txt

amel27
18-04-2011, 11:21
не работает »выложил бы тестовый архивчик, чтобы не гадать на кофейной гуще...




© OSzone.net 2001-2012