我在带有两个参数的批处理文件中运行可执行文件;
cmd /k ""executable" "param1" "param2""
这将返回我想要启动的字符串。我无法弄清楚如何在变量中设置此返回值,然后在IE中启动它。
有什么想法吗?
答案 0 :(得分:5)
如果返回的字符串包含一行,您可以使用 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 :(得分:1)
您可以使用以下语法将可执行文件的输出捕获到变量中:
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的应用程序代码太复杂,无法直接在批处理文件中复制,或者可执行文件的源已丢失。如果不是,我个人更愿意在批处理文件本身中显示逻辑。
答案 2 :(得分:0)
start %1 %2
答案 3 :(得分:0)
编辑:Romulo A. Ceccon发布a much better solution,不涉及任何文件系统访问和肮脏的技巧。留在这里作为参考(如果你需要兼容9x,它也适用于command.com),但请更喜欢Romulo的解决方案。
使用您从模板动态生成的中间帮助程序脚本,浏览您设置的环境变量。您将需要某处的写权限,否则无法完成(Windows命令shell语言非常非常有限。)
让我们使用以下内容调用您的帮助程序脚本模板{<1}}:
helper.tpl
确保set INTERMEDVAR=
只有一行(没有尾随的CRLF!),并确保在那里等号后没有任何空格。
现在,在您的主脚本中,将命令的输出捕获到一个临时文件中(让我们称之为helper.tpl
):
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
现在INTERMEDVAR变量被设置为“可执行”输出的第一行(如果它输出多行,你就是你自己......)你现在可以调用IE:
call my_helper_script.cmd
不要忘记清理创建的文件:
start iexplore.exe "%INTERMEDVAR%"
当并行多次调用时,这显然不起作用 - 您必须使用当前cmd.exe的PID(例如)参数化临时文件和帮助程序脚本名称,以便它们不会覆盖彼此的输出,但原则是一样的。
但是,如果你能得到一个真正的shell,那就用它吧。 cmd.exe非常麻烦。