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

时间:2016-04-12 12:51:51

标签: windows vbscript runtime-error environment-variables msgbox

我正在尝试为Windows创建自己的自定义对话框,使用快捷方式/ wscript /和VBS从头开始使它们尽可能逼真。对于我的一些错误/对话框,我想在对话框中使用%computername%变量使其看起来更加真实 - 例如“驱动器C:已在{{1}上格式化}我已使用此类变量以前使用批处理文件,并且它始终有效。我意识到VBS是一种语言不同的不同语言,但我尝试过的例子都没有。

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

%computername%

显然这不起作用,我得到以下内容: Using %computername% as variable

我读了一下使用VBS环境变量。但我发现的解决方案都没有奏效。

以下是我使用的一些不起作用的资源 - 我列出了我使用的资源,我使用的代码以及结果的图片:

1。 Stack Overflow

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

enter image description here

2。 Stack Overflow (different page)ss64

     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")

enter image description here

第3。 Google Groups

    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")

enter image description here

我在这里做错了吗?任何人都可以对此有所了解吗?这似乎是一个相当微不足道的问题,我觉得你应该能够将环境变量集成到一个对话框中(我以前在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")

给了我这个:

enter image description here

这更好但不完全是我想要的。如果我单击确定,然后我收到域,然后是一个空框,然后我的原始消息与strServer,其中computername应该是

3 个答案:

答案 0 :(得分:2)

您正在尝试模仿批处理文件。 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."

答案 1 :(得分:1)

再次,你不是following advice you have already been given,因为它表示示例将失败,因为一个语句跨越多行导致

  

Microsoft VBScript编译错误:预期声明

错误。

只需将语句放在每个语句的一行上即可修复此

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")

或者您需要使用行延续字符_以允许语句跨越多行。

您还在使用数值而不是具有already been pointed out in the other question的命名常量。

如果我们不必再次猜测,您显然希望在最后一个语句中输出strServer变量,您可以使用String Concatenation

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

答案 2 :(得分:1)

您的主要问题是字符串连接。你不能注射"简单地通过使用其名称将变量的值转换为字符串文字。让我们看看你的第二个例子:

 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")