2009-04-20 85 views
1

我正在一个带有两个参数的批处理文件中运行一个可执行文件;从可执行文件设置变量

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

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

任何想法?

+0

请注意,您需要使用/ C(而不是/ K),因为您希望shell终止并返回字符串。 – 2009-04-20 14:34:33

回答

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的应用程序代码太复杂,无法直接在批处理文件中再现,或者可执行文件的源已丢失。如果不是,我个人更希望在批处理文件本身中显示逻辑。

+0

谢谢Joshua,这个工作很完美。 应用程序代码太难以在批处理文件中重现 – kgbland 2009-04-20 15:02:10

0

start %1 %2

0

编辑:罗慕洛A. Ceccon发布a much better solution不涉及任何文件系统的访问和肮脏的把戏。留在这里作为参考(如果需要9x兼容性,它也可以与command.com一起使用),但请更喜欢Romulo的解决方案。


检查您通过使用从模板动态生成的中间帮助程序脚本设置的环境变量。你需要写权限的地方,否则就不能这样做(在Windows命令shell语言是非常非常有限的。)

让我们把你的助手脚本模板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 

这显然不能并行多次调用时工作 - 你必须使用当前CMD参数化到临时文件和辅助脚本名称.exe的PID(例如),以便它们不会覆盖对方的输出,但原理是一样的。

但是,如果你能得到一个真正的shell,使用它。 cmd.exe非常麻烦。

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:\> 
+0

哦,很好。很多,比我的解决方案好多了(这是从command.com时代剩下的,methinks:D)。 Upvoted这个。 – 2009-04-20 14:34:38