从可执行文件设置变量

时间:2009-04-20 13:53:10

标签: windows batch-file cmd

我在带有两个参数的批处理文件中运行可执行文件;

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

这将返回我想要启动的字符串。我无法弄清楚如何在变量中设置此返回值,然后在IE中启动它。

有什么想法吗?

4 个答案:

答案 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

Source

然后您可以将值传递给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非常麻烦。