从Windows CMD调用从.vbs获取返回值

时间:2016-02-23 02:42:57

标签: vbscript cmd msgbox

我有一个CMD文件,它将一个MsgBox弹出命令写入一个VBScript文件,然后转身并立即执行它。最初它只是使用“确定”按钮来消除用户版本已过期的警告。我想修改它以使用是/否/取消按钮来允许用户自动更新版本。

这是导致弹出窗口的代码。我尝试了一些不同的东西来尝试让.vbs文件返回一个值,但是在获得正确的语法方面遇到了问题。有什么建议吗?

@echo X=MsgBox("Your Version: %VER%" +vbCrLf+ "Recommended: %RVER%" +vbCrLf+ "Do you want to update the version?",vbYesNoCancel,"Warning Message"^) >%APPDATA%\temp_msg2.vbs

call %APPDATA%\temp_msg2.vbs

谢谢!

2 个答案:

答案 0 :(得分:2)

VBScript只是一种语言,有许多不同的主机和应用程序 - 不仅仅是shell脚本,因此设置脚本的返回值是主机的责任,而不是语言。在这种情况下,主机是cscriptwscript(分别用于命令行和窗口主机)。两个主机都公开WScript对象,您在此处指定返回代码作为Quit方法的参数(请注意,VBScript不使用void上的括号(Sub )方法调用:

WScript.Quit 123 

如果您想从MsgBox返回值,可以直接提供:

WScript.Quit MsgBox( "Foobar" )

您的.cmd批处理文件需要知道vbYesvbNovbCancel的数值。

...我建议在VBScript文件中完成所有脚本编写,并尽可能避免使用.cmd / .bat文件,如果可以的话,因为VBScript更具可读性和强大功能(虽然我更喜欢使用JScript语言,但那只是我。)

MSDN引用了WScript对象的所有成员:https://msdn.microsoft.com/en-us/library/at5ydy31(v%3Dvs.84).aspx

以下是列出wscript / cscript内的其他对象和功能的页面(统称为“Windows脚本主机”):https://msdn.microsoft.com/en-us/library/98591fh7(v=vs.84).aspx

答案 1 :(得分:1)

@ECHO OFF
SETLOCAL
echo X=MsgBox("Your Version: %VER%" +vbCrLf+ "Recommended: %RVER%" +vbCrLf+ "Do you want to update the version?",vbYesNoCancel,"Warning Message"^) >U:\temp_msg2.vbs
>>U:\temp_msg2.vbs echo wscript.quit X

call u:\temp_msg2.vbs

ECHO %errorlevel%

GOTO :EOF

显示6表示是,7表示否,2表示取消/大红色x表示我。