Can I pick up environment variables in vbscript WSH script?

后端 未结 5 477
终归单人心
终归单人心 2020-11-28 13:37

Is is possible to read system environment variables in a Windows Scripting Host (WSH) VBS script?

(I am writing a VBScript using Windows Scripting Host for task for

5条回答
  •  情深已故
    2020-11-28 13:58

    The existing answers are all helpful, but let me attempt a pragmatic summary:

    Typically, you want the current process's definition of an environment variable:

    CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%")
    

    This is the equivalent of (note the absence of % around the variable name):

    CreateObject("WScript.Shell").Environment("Process").Item("TEMP")
    

    Caveat: Do not omit the ("Process) part: if you do, you'll get the system scope's definition of the variable; see below.

    .ExpandEnvironmentStrings is conceptually simpler and more flexible: It can expand arbitrary strings with embedded (%-enclosed) environment-variable references; e.g.:

    CreateObject("WScript.Shell").ExpandEnvironmentStrings("My name is %USERNAME%")
    

    On rare occasions you may have to access environment-variable definitions from a specific scope (other than the current process's).

      sScope = "System" ' May be: "Process", "User", "Volatile", "System"
      CreateObject("WScript.Shell").Environment(sScope).Item("TEMP")
    

    Note: As stated above, omitting the scope argument defaults to the System scope.

    Caveat: Accessing a value this way does not expand it: Environment-variable values can be nested: they can refer to other environment variables.
    In the example above, the return value is %SystemRoot%\TEMP, which contains the unexpanded reference to %SystemRoot%.
    To expand the result, pass it to .ExpandEnvironmentStrings(), as demonstrated above.

提交回复
热议问题