Установка переменной из исполняемого файла - PullRequest
1 голос
/ 20 апреля 2009

Я запускаю исполняемый файл в пакетном файле с двумя параметрами;

cmd /k ""executable" "param1" "param2""

Возвращает строку, которую я хочу запустить. Я не могу понять, как установить это возвращение в переменной и затем запустить его в IE.

Есть идеи?

Ответы [ 4 ]

5 голосов
/ 20 апреля 2009

Если возвращаемая строка содержит одну строку, вы можете использовать FOR /F для установки значения переменной среды. Например:

s1.cmd

echo this is a one line string

s2.cmd

@SETLOCAL
@ECHO OFF
for /f "tokens=*" %%a in ('cmd /c s1.cmd') do set MY_VAR=%%a
echo got: %MY_VAR%
ENDLOCAL

Результат

C:\> s2.cmd
got: this is a one line string

C:\>
1 голос
/ 20 апреля 2009

Вы можете использовать следующий синтаксис для записи вывода вашего исполняемого файла в переменную:

FOR /F "tokens=*" %%i in ('%~dp0YOUR_APP.exe') do SET TOOLOUTPUT=%%i

Источник

тогда вы можете передать значение в IE следующим образом:

START "YOUR_WINDOW_NAME" /MAX /D"C:\Program Files\Internet Explorer\" iexplore %TOOLOUTPUT%

Я полагаю, что код приложения, определяющий URL-адрес, слишком сложен для непосредственного воспроизведения в командном файле, или исходный код исполняемого файла потерян. Если нет, то лично я предпочел бы, чтобы логика была видна в самом командном файле.

0 голосов
/ 20 апреля 2009

Edit: Romulo A. Ceccon опубликовал гораздо лучшее решение , которое не включает доступ к файловой системе и грязные уловки. Оставьте это здесь для справки (он также работает с command.com, если вам нужна совместимость с 9x), но, пожалуйста, предпочтите решение Ромуло.


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

Давайте назовем ваш шаблон вспомогательного скрипта helper.tpl со следующим содержимым:

set INTERMEDVAR=

Убедитесь, что у helper.tpl есть только одна строка (без завершающего CRLF!) И убедитесь, что после знака равенства у вас нет пробелов.

Теперь, в вашем основном скрипте, запишите вывод вашей команды во временный файл (назовем его my_output_file.tmp):

cmd /k ""executable" "param1" "param2"" > my_output_file.tmp

Затем скопируйте содержимое вспомогательного шаблона и вывод вместе в ваш вспомогательный сценарий, назовем его my_helper_script.cmd:

copy /b helper.tpl + my_output_file.tmp my_helper_script.cmd

Затем оцените вспомогательный скрипт в текущем контексте:

call my_helper_script.cmd

Теперь переменная INTERMEDVAR установлена ​​на первую строку выходных данных "исполняемого файла" (если она выводит более одной строки, вы сами по себе ...) Теперь вы можете вызывать IE:

start iexplore.exe "%INTERMEDVAR%"

И не забудьте очистить созданные файлы:

del /q /f my_output_file.tmp my_helper_script.cmd

Это, очевидно, не будет работать при параллельном вызове несколько раз - вам придется параметризовать имена временных файлов и сценариев-помощников, используя PID текущего cmd.exe (например), чтобы они не перезаписывали вывод друг друга, но принцип тот же.

Однако, если вы можете получить настоящую оболочку, используйте это. cmd.exe очень громоздкий.

0 голосов
/ 20 апреля 2009

start %1 %2

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