最近发现有不少人在讨论使用脚本如何设置系统全局长期有效的环境变量的问题,正巧最近也用到了这方面的内容,所以将大家的讨论内容做了一些收集整理,遂成此文。
1、内部工具:regedit /s、echo >> & regedit /s、reg add
2、外部工具:setx、setntenvar、winset
3、其他脚本:vbs
4、自动批处理:autoexec.bat、autoexec.nt
===============================================
1、内部工具:regedit /s、echo >> & regedit /s、reg add
1.1 regedit /s - Windows自带工具
优点:在所有Windows系统下均可使用,可同时操作其他注册表项
缺点:不可动态定义变量,需要重启才能生效,需读取额外的注册表文件
:: dsc.reg 已经存在并可用
REGEDIT /S DSC.REG
1.2 echo >> & regedit /s - Windows自带命令和工具
优点:可动态定义变量,在所有Windows系统下均可使用,可同时操作其他注册表项
缺点:需要重启才能生效,需读写额外的注册表文件
:: dsc.reg 已经存在并可用,修改环境变量Driver为cd变量转化值
ECHO "Driver"="%cd:\=\\%\\sqora32.dll">>DSC.REG
REGEDIT /S DSC.REG
1.3 reg add - Windows 2K/XP/03自带工具
优点:可动态定义变量
缺点:需要重启才能生效,缺省不能在9X下使用
SET ENV_POOL=HKLM\SYSTEM\ControlSet001\Control\Session Manager\Environment
REG ADD "%ENV_POOL%" /V PATH /T REG_SZ /D "%cd%;%Path%" /F >nul
2、外部工具:setx、setntenvar、winset
2.1 setx - 来自 2K/XP/03 安装光盘的支持工具包
Version 1.0a (5/31/96)
Gary Milne - Microsoft MCS
优点:可动态定义变量,不需重启立即生效,可动态引用变量,可引用文本内容设置变量
缺点:只能在NTs下使用,不能删除变量而只能置为空值
:: 设置当前用户全局变量
SETX MACHINE COMPAQ
:: 设置系统全局变量
SETX MACHINE "COMPAQ COMPUTER" -m
:: 静态引用其他环境变量(仅引用一次当前会话环境变量)
SETX MYPATH %PATH%
:: 动态引用其他环境变量(总是引用全局环境变量)
SETX MYPATH ~PATH~
:: 使用注册表值设置环境变量
SETX BUILD -k "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\CurrentBuildNumber"
:: 使用文件中指定内容设置环境变量(不会立即生效)
SETX IPGATEWAY -f ipconfig.out -r 0,7 "Gateway"
2.2 setntenvar - 来自无忧启动论坛(topic=4197) Lx1638(老九)
SetNTEnVar V06.04
优点:可动态定义变量,可定义光驱盘符为环境变量,不需重启立即生效
缺点:只能在NTs下使用
:: 修改变量
SETNTENVAR PATH=%PATH_BAK%
:: 删除变量
SETNTENVAR BAK_PATH=
:: 定义光驱盘符为环境变量CDROM\CDROM0\CDROM1等
SETNTENVAR /FindCDROM
2.3 winset - 来自9x安装盘支持工具包
优点:可动态定义变量,不需重启立即生效
缺点:只能在9X下使用,在NTs下运行出错
:: 修改变量
WINSET PATH=%PATH_BAK%
:: 删除变量
WINSET BAK_PATH=
3、其他脚本:vbs
3.1 vbs - 来自中国DOS联盟论坛(tid=27952) electronixtar
set sysenv=CreateObject("WScript.Shell").Environment("system") '系统环境变量的数组对象
sysenv.Remove("ztest2") '删除变量
sysenv("ztest3")="test value" '添加变量
优点:可动态定义变量,不需重启立即生效
缺点:需要修改系统配置文件,仅对使用command创建的命令行有效
4、自动批处理:autoexec.bat、autoexec.nt
4.1 autoexec.bat - 来自系统盘根目录
优点:可动态定义变量,可在DOS/Windows全系列系统下使用
缺点:需要重启才能生效,需要修改系统文件
echo set path=d:\batch;%path%>> c:\autoexec.bat
在2K/XP/03中是否解析autoexec.bat中的变量与以下注册表项相关
User Key: [HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon]
Value Name: ParseAutoexec
Data Type: REG_SZ (String Value)
Value Data: (0 = disabled, 1 = enabled)
4.2 autoexec.nt - 来自2K/XP/03系统的%SystemRoot%\system32
优点:可动态定义变量,不需重启立即生效
缺点:需要修改系统文件,仅对2K/XP/03中使用autoexec.nt文件的命令行有效
echo set path=d:\batch;%path%>> %SystemRoot%\System32\autoexec.nt
===============================================
总体而言,系统环境变量在NT系列的注册表下有两个地方:
1、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
代表系统环境变量空间的注册表项
2、HKEY_CURRENT_USER\Environment
代表当前用户环境变量空间的注册表项
这两个键支下的注册表值分别表示相应的环境变量,直接修改系统空间的变量需要重启才会再全局生效,在用户空间修改的只要注销就可以了。
另外需要注意的是,使用以上方法设置的系统变量,都是无法在批处理或命令行运行的当前会话(窗口)中生效的,所以如果在设置变量后即刻去查询,是不会发生变化的。
解决这个问题的最简单办法是设置系统级变量的同时,使用set设置会话级变量为相同的内容。另外,也可以使用reg query或regedit /e或者setx -k查询相应的注册表值。
===============================================
关于autoexec.nt文件的问题
配置文件是否生效与文件名无关,只有且只要它能被命令行程序正确引用时才生效。
引用配置文件的方法,新建快捷方式,在项目中填写command,按确定后生成程序信息文件(.pif)"MS-DOS 方式",在“属性->程序->高级”中定义初始化文件
但是因为command.com总是使用%SystemRoot%\_default.pif作为程序信息文件,而_default.pif定义了auotexec.nt和config.nt作为初始化配置文件,所以使用command.com打开命令行,总是能成功引用autoexec.nt中设置的环境变量。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。