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 очень громоздкий.