SETX.exe (Resource Kit, Windows 7)
Set environment variables permanently, SETX can be used to set Environment Variables for the machine (HKLM) or currently logged on user (HKCU):
Syntax SETX [/s Computer [Credentials]] Variable Value [/m] SETX [/s Computer [Credentials]] [Variable] /k Path [/m] SETX [/s Computer [Credentials]] /f FileName {[Variable] {/a X,Y | /r X,Y "String"} [/m] | /x} [/d Delimiters] Key: /s Computer The name or IP address of a remote computer. Do not use backslashes. (default = the local computer) Credentials The username and password used to connect to Computer: /u [Domain\]UserName [/p [Password]]] /u [Domain\]UserName Run the script with the credentials of the specified user account. The default value is the system permissions. /p [Password] The password of the user account that is specified in the /u parameter. Variable The name of the environment variable that you want to set. Value The value to which you want to set the environment variable. /k Path Specifies that the variable is set based on information from a registry key. The path uses the following syntax: \HIVE\KEY\...\Value For example, you might specify the following path: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation\StandardName /f FileName The file that you want to use. /a X,Y Specifies absolute coordinates and offset as search parameters. /r X,Y "String" Specifies relative coordinates and offset from String as search parameters. /m Set the variable in the system environment HKLM. (The default is the local environment HKCU) /x Display file coordinates, ignoring the /a, /r, and /d command-line options. /d Delimiters Specifies delimiters such as "," or "\" to be used in addition to the four built-in delimiters — SPACE, TAB, ENTER, and LINEFEED. Valid delimiters include any ASCII character. The maximum number of delimiters is 15, including built-in delimiters.
Under Windows XP all switches are prefixed with - instead of /.
Early versions of SETX (XP) do not support the options /k,/u,/p or /s
SETX may be used to set environment variables from one of three sources (modes): Command Line Mode, Registry Mode, or File Mode.
Command Line Mode
Environment variables are stored in the registry:
User Variables: HKEY_CURRENT_USER\Environment System Variables: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
Because SETX writes variables to the master environment in the registry, edits will only take effect when a new command window is opened - they do not affect the current CMD or PowerShell session.
Machine variables are stored on the machine and will not follow a users roaming profile. To set a machine variable (/m) requires Administrator rights.
User variables are stored in the user profile and will follow the users roaming profile.
If variables with the same name are stored as both User and Machine Environment variables, the user variable will take precedence. If a Session variable is created that will take precedence over any User and/or Machine Environment variable with the same name.
To edit environment variables in the Windows GUI: Control Panel | System | Advanced | Environment Variables
To delete an environment variable either use the GUI (recommended) or delete the value from the registry with REG delete HKCU\Environment /V _myvar Deleting a variable with REG will not take effect until next logon due to caching of registry data. Setting value of "" (empty quotes) will appear to delete the variable - it‘s not shown by SET but the variable name will remain in the registry.
Registry Mode
HKEY_CURRENT_USER and HKEY_LOCAL_MACHINE are the only supported hives. REG_DWORD, REG_EXPAND_SZ, REG_SZ, and REG_MULTI_SZ are the valid RegKey data types. When reading REG_MULTI_SZ values from the registry, only the first item will be extracted and used.
File Mode
REG_DWORD registry values are extracted and used in hexadecimal mode. File mode supports the parsing of carriage return and line feed (CRLF) text files only.
Examples:
In all the examples below the variable names are prefixed with an underscore _ this is not a requirement but is a common convention to indicate a CMD variable name.
Set the variable _car_park to be ‘South‘ in the users environment:
SetX _car_park South
Set the variable _car_park to be ‘North‘ in the MACHINE environment:
SetX _car_park North /m
Store the value of _car_park in a second environment variable SetX _oldcarpark %_car_park%
Set the _car_park environment variable in the local environment to ‘West‘ on a remote computer named Computer64:
SetX /s computer64 /u ss64dom\user64 /p P7BmqgWZ1a _car_park West
Set the _MyPath environment variable in the local environment to use the search path defined in the %PATH% environment variable:
SetX _MyPath %PATH%
Set the _MyPath environment variable in the local environment to use the search path defined in the %PATH% environment variable after replacing ~ with %:
SetX _MyPath ~PATH~
Set the _MyPath environment variable in the local environment to use the search path defined in the PATH environment variable on a remote computer named Computer64:
SetX /s computer64 /u ss64dom\user64 /p P7BmqgWZ1a _MyPath %PATH%
Set the _TZone environment variable in the local environment to the value found in the HKLM...\StandardName registry key:
SetX _TZone /k HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation\StandardName
Set the _Build environment variable in the system environment to the value found in the HKLM\...\CurrentBuildNumber registry key:
SetX _Build /k "HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\CurrentBuildNumber" /m
To display the contents of a file named Ipconfig.out, along with the contents‘ corresponding coordinates:
SetX /f ipconfig.out /x
To set the _IPADDR environment variable in the local environment to the value found at the coordinate 5,11 in the file Ipconfig.out:
SetX _IPADDR /f ipconfig.out /a 5,11
To set the _OCTET environment variable in the local environment to the value found at the coordinate 5,3 in the file Ipconfig.out with delimiters "#$*.":
SetX _OCTET /f ipconfig.out /a 5,3 /d "#$*."
To set the _IPGATEWAY environment variable in the local environment to the value found at the coordinate 0,7 with respect to the coordinate of "Gateway" in the file Ipconfig.out, type:
SetX _IPGATEWAY /f ipconfig.out /r 0,7 Gateway
To display the contents of a file named Ipconfig.out — along with the contents‘ corresponding coordinates — on a computer named Computer64, type:
SetX /s computer64 /u maindom\hiropln /p p@ssW23 /f ipconfig.out /x
"You are never dedicated to something you have complete confidence in. No-one is fanatically shouting that the sun is going to rise tomorrow. When people are fanatically devoted to political or religious faiths or any other kind of dogmas or goals, its always because these dogmas or goals are in doubt" ~ Robert M Pirsig