Edit: Ромуло А. Ceccon отправил a much better solution, который не требует никакого доступа к файловой системе и пакости. Оставьте это здесь для справки (он также работает с command.com, если вам нужна 9-кратная совместимость), но, пожалуйста, предпочитайте решение Ромуло.
Пройдите через переменную среды, заданную с помощью промежуточного вспомогательного скрипта, который вы динамически генерируете из шаблона. Вам нужны права на запись где-то, в противном случае она не может быть сделано (язык команд оболочки 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
Это, очевидно, не работает, когда вызывается несколько раз параллельно - вам придется параметризовать временные имена файлов и вспомогательный скрипт с использованием текущего ЦМД .exe PID (например), чтобы они не перезаписывали вывод друг друга, но принцип тот же.
Однако, если вы можете получить настоящую оболочку, используйте ее. cmd.exe чрезвычайно громоздкий.
Обратите внимание, что вам нужно использовать/C (а не/K), потому что вы хотите, чтобы оболочка завершила и вернула строку. –