【问题标题】:Getting return value from .vbs called from Windows CMD从 Windows CMD 调用的 .vbs 获取返回值
【发布时间】:2016-02-23 02:42:57
【问题描述】:

我有一个 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

谢谢!

【问题讨论】:

    标签: vbscript cmd msgbox


    【解决方案1】:

    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

    【讨论】:

      【解决方案2】:
      @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。

      【讨论】:

        猜你喜欢
        • 2023-03-12
        • 1970-01-01
        • 2014-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多