如何使用 MsgBox 在 VBS 中使用用户输入正确配置条件操作?

How do I properly configure conditional actions with user input in VBS with MsgBox?

我一直在尝试让 VBS 脚本与 msgbox 一起工作一段时间。当我使用单个 msgbox 语句时,它起作用了。一旦我开始添加条件输入选项,它就不起作用了。

我在 Super User 上 post 编辑了这个问题,我被告知要使用 "dim" 语句,并在这个网站上使用 post,我现在都做了。这是我正在尝试的一些有效代码。 (请忽略我的例子。)

Option Explicit
Dim vbsmsg, vbsyes, vbsno
vbsmsg=MsgBox("Proceeding will wipe the contents of your C: Drive. Proceed?", 1+48, "Format Drive C:")

当我通过快捷方式 运行 上面的代码时,我得到一个这样的对话框:

但是如果我添加以下内容,我在单击 "OK" 或 "Cancel"

时会出现 运行 次错误
If vbsmsg=1 Then
    vbsyes=MsgBox("The contents of your C: Drive could not be successfully deleted.", 0+64, "Error Formatting Drive C: - System Error 5")
If vbsmsg=2 Then
    vbsno=MsgBox("Not all of the contents of your C: Drive were successfully deleted. Please try again.", 0+64, "Error Formatting Drive C: - System Error 303")

错误中的line/character在"System Error 303"

中的“0”和“3”之间

我已经尝试了大量的故障排除。我尝试过更改暗淡的语句、显式添加选项、使用 1 和 2 而不是 6 和 8 等等……似乎没有任何效果。当我注释掉第二部分时,它没有在执行文件后出现错误,而是对我关闭了。我确信我的所有语法都是正确的并且格式正确。我将 1 和 2 更改为 vbOK 和 vbCancel,当我将其更改回来时,它根本不起作用,并立即向我显示了此页面上显示的错误。

如果有人知道我的示例有什么问题,我将不胜感激。我对使用 VBS 文件还很陌生,但我已经使用 .bat 文件很长时间了,none 这些原则似乎在这里起作用,

我将不胜感激任何帮助,即使它很小,

试试这个例子:

Option Explicit
Dim Title,Question
Title = "user input in VBS with MsgBox"
Question = MsgBox("Proceeding will wipe the contents of your C: Drive. Proceed ?",vbYesNo+vbQuestion, Title)
If Question = vbYes Then
    MsgBox "We proceed wipping your C:\ drive",vbExclamation,Title
    'Call your sub here to continue proceeding your script
Else
    MsgBox "Canceling the operation !",vbCritical,Title
    Wscript.Quit()
End If

有关MsgBox Constants

的更多信息

虽然@Hackoo's is technically correct it doesn't answer the initial question,所以我会在这里尝试。

错误原因

Microsoft VBScript compilation error: Expected 'End'

是由于 If 语句跨越多于一行而没有 End If 来完成语句块,如 @Hackoo's 示例中添加 End If 将更正此问题错误。

如果出于某种原因你想保持语法简洁,那么你有两个选择;

  1. If 语句全部放在一行

    Option Explicit
    Dim vbsmsg
    vbsmsg = MsgBox("Proceeding will wipe the contents of your C: Drive. Proceed?", vbYesNo + vbQuestion, "Format Drive C:")
    
    If vbsmsg = vbYes Then Call MsgBox("The contents of your C: Drive could not be successfully deleted.", vbExclamation, "Error Formatting Drive C: - System Error 5")
    If vbsmsg = vbNo Then Call MsgBox("Not all of the contents of your C: Drive were successfully deleted. Please try again.", vbCritical, "Error Formatting Drive C: - System Error 303")
    

    看起来有点难看,有时很难理解(但这只是我的意见)

  2. 使用行继续符 (_) 允许单个语句跨越多行,在 VBScript 中这也称为Statement Break.

    Option Explicit
    Dim vbsmsg
    vbsmsg = MsgBox("Proceeding will wipe the contents of your C: Drive. Proceed?", vbYesNo + vbQuestion, "Format Drive C:")
    
    If vbsmsg = vbYes Then _
        Call MsgBox("The contents of your C: Drive could not be successfully deleted.", vbExclamation, "Error Formatting Drive C: - System Error 5")
    If vbsmsg = vbNo Then _
        Call MsgBox("Not all of the contents of your C: Drive were successfully deleted. Please try again.", vbCritical, "Error Formatting Drive C: - System Error 303")
    

如前所述,不用说,您应该尽可能在代码中使用 VBScript 命名常量,而不是硬编码数值。