我可以在vbscript WSH脚本中提取环境变量吗?
是否可以在Windows脚本主机(WSH)VBS脚本中读取系统环境变量 (我正在为巡航控制任务使用Windows脚本主机编写VBScript,并希望获取项目构建URL。)来自 还有更多。这里有一个例子(摘自): 这对我很有用:我可以在vbscript WSH脚本中提取环境变量吗?,vbscript,environment-variables,wsh,Vbscript,Environment Variables,Wsh,是否可以在Windows脚本主机(WSH)VBS脚本中读取系统环境变量 (我正在为巡航控制任务使用Windows脚本主机编写VBScript,并希望获取项目构建URL。)来自 还有更多。这里有一个例子(摘自): 这对我很有用: Dim objNetwork Set objNetwork = CreateObject("WScript.Network") MsgBox objNetwork.UserName 或从外壳: Set wshShell = WScript.CreateObject( "
Dim objNetwork
Set objNetwork = CreateObject("WScript.Network")
MsgBox objNetwork.UserName
或从外壳:
Set wshShell = WScript.CreateObject( "WScript.Shell" )
strUserName = wshShell.ExpandEnvironmentStrings( "%USERNAME%" )
或者来自环境变量(它应该可以工作,但当我测试时它是错误的!):
现有的答案都很有帮助,但让我尝试一个实用的总结:
CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%")
通常,您需要当前进程对环境变量的定义:
CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%")
这相当于(注意变量名周围没有%
):
注意事项:不要忽略(“过程)
部分:如果省略,您将获得变量的系统范围定义;请参见下文
.ExpandEnvironmentStrings
在概念上更简单、更灵活:它可以通过嵌入(%
-封闭)的环境变量引用扩展任意字符串;例如:
CreateObject("WScript.Shell").ExpandEnvironmentStrings("My name is %USERNAME%")
在极少数情况下,您可能必须从特定范围访问环境变量定义(当前进程的定义除外) 注意:如上所述,省略scope参数默认为
系统
范围
注意事项:以这种方式访问值不会将其展开:环境变量值可以嵌套:它们可以引用其他环境变量。在上面的示例中,返回值是
%SystemRoot%\TEMP
,其中包含对%SystemRoot%
的未扩展引用要展开结果,请将其传递给
.ExpandEnvironmentStrings()
,如上所示。不提供通用环境变量访问,它只是碰巧将3个值作为属性公开,这些属性也反映在环境变量中:ComputerName
、UserDomain
和UserName
。上一个示例不起作用的原因是WshShell.environmentment
与WshShell.Environment(“系统”)相同,并且系统范围中未定义%USERNAME%
。
Set WshShell = CreateObject("WScript.Shell")
Set WshEnv = WshShell.Environment
MsgBox "USERNAME=" & WshEnv.Item("USERNAME")
CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%")
CreateObject("WScript.Shell").Environment("Process").Item("TEMP")
CreateObject("WScript.Shell").ExpandEnvironmentStrings("My name is %USERNAME%")
sScope = "System" ' May be: "Process", "User", "Volatile", "System"
CreateObject("WScript.Shell").Environment(sScope).Item("TEMP")