如何在VBS 中使用MsgBox 中的计算机名环境变量?

How can I use the Computer Name Environment Variable in VBS with MsgBox?

我正在尝试为 Windows 创建我自己的自定义对话框,使用 shortcuts/wscript/and VBS 从头开始​​制作它们,使它们尽可能逼真。对于我的某些 errors/dialogs,我想在对话框中使用 %computername% 变量以使其看起来更加真实 - 例如“驱动器 C:已在我使用的 %computername% 上格式化这样的变量以前用批处理文件,它总是有效。我意识到 VBS 是一种不同的语言,具有不同的语法,但是 none 我试过的例子都有效。

这是我最初尝试做的事情:

Set WshShell = WScript.CreateObject( "WScript.Shell" )
x=msgbox("Windows has reformatted Drive C: on %computername% successfully.", 0+64, "Hard Disk Reformat Successful")

显然这没有用,我得到以下信息:

我阅读了一些关于使用 VBS 环境变量的内容。但是我找到的 none 解决方案有效。

以下是我使用的一些无效资源 - 我列出了我使用的资源、我使用的代码以及结果图片:

1. Stack Overflow

     Set WshShell = WScript.CreateObject( "WScript.Shell" )
     dim oFso, oShell, oShellEnv, computerName, target, source
     const overwrite = true
     set oFso      = CreateObject("Scripting.FileSystemObject")
     set oShell    = WScript.CreateObject("WScript.Shell")
     set oShellEnv = oShell.Environment("Process")
     computerName  = oShellEnv("ComputerName")
     x=msgbox("Windows has reformatted Drive C: on computerName successfully.", 0+64, "Hard Disk Reformat Successful")

2。 Stack Overflow (different page) and ss64

    dim strValue
    Set WshShell = WScript.CreateObject( "WScript.Shell" )
    Set objShell = CreateObject("WScript.Shell")
    objShell.Environment("computername") = "This is some data to share"
    strValue = objShell.Environment("VOLATILE")("MyVariable")
    x=msgbox("Windows has reformatted Drive C: on strValue successfully.", 0+64, "Hard Disk Reformat Successful")

3。 Google Groups

    Set WshShell = WScript.CreateObject( "WScript.Shell" )
    Set wshShell = Wscript.CreateObject( "Wscript.Shell" )
    WScript.Echo "HOSTNAME: " & wshShell.ExpandEnvironmentStrings
    ( "%COMPUTERNAME%" )
    WScript.Echo "DOMAIN  : " & wshShell.ExpandEnvironmentStrings
    ( "%USERDOMAIN%" )
    WScript.Echo ""
    strServer=wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )
    x=msgbox("Windows has reformatted Drive C: on strServer successfully.", 0+64, "Hard Disk Reformat Successful")

我是不是做错了什么?任何人都可以对此有所了解吗?这似乎是一个相当微不足道的问题,我觉得你应该能够将环境变量集成到一个对话框中(我之前在 Windows 中原生看到过它。)我已经使用批处理文件很长时间了但是我对 VBS 脚本编写还比较陌生,所以如果我在某处或某处犯了一个非常愚蠢的错误,我深表歉意,

我正在寻找任何可行的解决方案。只要我看到 %computername% 是实际的本地主机名,而不是 computerName 或变量名,那就太好了。

提前感谢您的帮助!

编辑: 回复@Lankymart

使用此代码:

set WshShell = WScript.CreateObject( "WScript.Shell" )
Set wshShell = Wscript.CreateObject( "Wscript.Shell" )
WScript.Echo "HOSTNAME: " & wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )
WScript.Echo "DOMAIN  : " & wshShell.ExpandEnvironmentStrings( "%USERDOMAIN%" )
WScript.Echo ""
strServer=wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )
x=msgbox("Windows has reformatted Drive C: on strServer successfully.", 0+64, "Hard Disk Reformat Successful")

给我这个:

这更好,但不是我想要的。如果我单击“确定”,那么我会收到域,然后是一个空框,然后是带有 strServer 的原始消息,计算机名应该是

同样,您不是 ,按照目前的情况,该示例将失败,因为一条语句跨越多行,导致

Microsoft VBScript compilation error: Expected statement

错误。

只需将每个语句放在一行中即可解决此问题

Set wshShell = Wscript.CreateObject( "Wscript.Shell" )
WScript.Echo "HOSTNAME: " & wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )
WScript.Echo "DOMAIN  : " & wshShell.ExpandEnvironmentStrings( "%USERDOMAIN%" )
WScript.Echo ""
strServer=wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )
x=msgbox("Windows has reformatted Drive C: on strServer successfully.", 0+64, "Hard Disk Reformat Successful")

或者您需要使用换行符 (_) 以允许语句跨越多行。

您还在使用数值而不是具有 .

的命名常量

无需我们再猜测,您显然想在最后一条语句中输出 strServer 变量,您可以使用 String Concatenation

strServer=wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )
x=msgbox("Windows has reformatted Drive C: on " & strServer & "successfully.", 0+64, "Hard Disk Reformat Successful")

您正在尝试模拟批处理文件。 VBS 有它自己的方式。 VBS方式更可靠。

来自 https://www.microsoft.com/en-au/download/details.aspx?id=2764

的帮助
     Set WshNetwork = WScript.CreateObject("WScript.Network")
     WScript.Echo "Domain = " & WshNetwork.UserDomain
     WScript.Echo "Computer Name = " & WshNetwork.ComputerName
     WScript.Echo "User Name = " & WshNetwork.UserName

您遇到的问题是需要使用 & 连接字符串和变量。 VB/VBS 字符串中唯一的特殊含义是两个引号 ("") 表示一个引号。其他一切都是文字,不像基于 C 的语言(并且以不同的方式批处理文件)。

msgbox "Windows has reformatted Drive C: on " & strServer & " Successfully."

您的主要问题似乎与字符串连接有关。您不能仅通过使用其名称 "inject" 将变量的值转换为字符串文字。让我们看看你的第二个例子:

 Set WshShell = WScript.CreateObject( "WScript.Shell" )
 dim oFso, oShell, oShellEnv, computerName, target, source
 const overwrite = true
 set oFso      = CreateObject("Scripting.FileSystemObject")
 set oShell    = WScript.CreateObject("WScript.Shell")
 set oShellEnv = oShell.Environment("Process")
 computerName  = oShellEnv("ComputerName")
 x=msgbox("Windows has reformatted Drive C: on computerName successfully.", 0+64, "Hard Disk Reformat Successful")

在最后一行,您试图在字符串文字中包含 computerName 变量的值,但 VBScript 不能那样工作。您需要做的是分解文字字符串并将几个字符串连同中间的变量连接在一起,如下所示:

x=msgbox("Windows has reformatted Drive C: on " & computerName & " successfully.", 0+64, "Hard Disk Reformat Successful")