XP系统的环境变量都是保存在注册表里的,所以如果想要通过命令行或者是批处理来修改环境变量,就需要知道它保存在注册表的哪个地方。
PS.CMD命令可以通过set直接修改环境变量,但那只是一次性的,系统重启后就无效了,这也是为什么要直接修改注册表的原因。
系统环境变量空间的注册表项保存位置为:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environment
当前用户环境变量空间的注册表项保存位置为:
HKEY_CURRENT_USER/Environment
有了这个东西,我们就可以利用CMD的reg命令来修改注册表了,关于reg命令,你可以自己去Google一下,用法很多。
你可以把修改环境变量的CMD语句写进批处理,当然你也可以使用C语言的system("命令");语句把它写成一个小程序。
这里我写三条语句来修改JDK的环境变量
reg add "HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environment" /v Java_Home /t reg_sz /d "%cd%" /f
这条语句是增加Java_Home环境变量,变量的值是这个批处理所在的路径。所以,将这三条语句写成批处理后,只要把批处理文件放置到JDK的安装目录下,即可一次性配置好环境变量。
reg add "HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environment" /v ClassPath /t reg_expand_sz /d ".;%Java_Home%/lib/dt.jar;%Java_Home%/lib/tools.jar;%Java_Home%/lib/htmlconverter.jar" /f
这条语句是增加ClassPath环境变量
reg add "HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environment" /v path /t reg_expand_sz /d ".;%path%;%Java_Home%/bin" /f
这条语句是修改Path环境变量,要使用%path%来读取之前的Path变量,否则会清空原来的Path变量
有了核心内容,其他的修饰就很随意了,交给你来办啦,嘿嘿。
恩,结合这篇文章看吧《常用系统环境变量的含义》
2009.10.02 重要修改:
最近在使用批处理的时候总是不能一次成功,刚才仔细研究了一下才发现一系列很重要的问题!
1、批处理会自动转换%variable%变量
2、使用reg命令修改注册表时,如果%variable%存在有效值,则自动替换%variable%;如果%variable%不存在,那么保持原样输出
实验了很多次才发现这两条关键性问题,懂不懂无所谓了,我懂了就行。如果想要成功使用批处理修改,必须修改2条。第一是批处理中的%必须使用转义字符%%维持变量符号,第二是必须最后倒入Java_Home,这样前面调用%Java_Home%的时候才不会自动转换变量。总之,最后有效的批处理是这样的:
@reg add "HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environment" /v ClassPath /t reg_expand_sz /d ".;%%Java_Home%%/lib/dt.jar;%%Java_Home%%/lib/tools.jar;%%Java_Home%%/lib/htmlconverter.jar" /f
@reg add "HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environment" /v path /t reg_expand_sz /d ".;%path%;%%Java_Home%%/bin" /f
@reg add "HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environment" /v Java_Home /t reg_sz /d "%cd%" /f
使用方法:将上面的代码保存为jdk.bat,然后放置到JDK安装目录下!!!双击即可完成环境变量的配置。
REG 的 命令 使用
Reg
对注册表子项信息和注册表项值中的值执行添加、更改、导入、导出以及其他操作。
reg 命令包括:
reg add reg compare reg copy reg delete reg export reg import reg load
reg query reg restore reg save reg unload
reg add
将新的子项或项添加到注册表中。
语法
reg add KeyName [{/v ValueName | /ve}] [/t DataType] [/s Separator] [/d Data] [/f]
参数
KeyName
指定要添加的子项或项的完整路径。要指定远程计算机,请包括计算机名(以 //ComputerName/ 格式表示),并将其作为 KeyName 的一部分
。省略 //ComputerName/ 会导致默认对本地计算机的操作。KeyName 必须包括一个有效的根键。有效根键包括 HKLM、HKCU、HKCR、HKU 以及
HKCC。如果指定了远程计算机,则有效根键是 HKLM 和 HKU。
/v ValueName
指定要添加到指定子项下的注册表项名称。
/ve
指定添加到注册表中的注册表项为空值。
/t Type
指定注册表项的类型。Type 必须是以下几种类型之一:
REG_SZ
REG_MULTI_SZ
REG_DWORD_BIG_ENDIAN
REG_DWORD
REG_BINARY
REG_DWORD_LITTLE_ENDIAN
REG_LINK
REG_FULL_RESOURCE_DESCRIPTOR
REG_EXPAND_SZ
/s Separator
当指定了 REG_MULTI_SZ 数据类型并且需要列出多个项时,指定用来分隔数据的多个实例的字符。如果没有指定,将使用默认分隔符“/0”。
/d Data
指定新注册表项的数据。
/f
添加注册表项而不要求确认。
/?
在命令提示符处显示 reg add 的帮助。
注释
? 该操作不能添加子树。该版本的 Reg 在添加子项时无需请求确认。
? 下表列出了 reg add 操作的返回值。
值 描述
0
成功
1
失败
? 对于 REG_EXPAND_SZ 项类型,在 /d 参数内将插入符号 ( ^ ) 与“%”一起使用。
示例
要在远程计算机 ABC 上添加 HKLM/Software/MyCo 项,请键入:
REG ADD //ABC/HKLM/Software/MyCo
要将一个注册表项添加到 HKLM/Software/MyCo,选项为值名:Data;类型:REG_BINARY;数值数据:fe340ead;请键入:
REG ADD HKLM/Software/MyCo /v Data /t REG_BINARY /d fe340ead
要将一个多值注册表项添加到 HKLM/Software/MyCo,选项为值名:MRU;数据类型:REG_MULTI_SZ;数值数据:fax/0mail/0/0;请键入:
REG ADD HKLM/Software/MyCo /v MRU /t REG_MULTI_SZ /d fax/0mail/0/0
要将一个扩展的注册表项添加到 HKLM/Software/MyCo,选项为值名:Path;数据类型:REG_EXPAND_SZ;数值数据:%systemroot%;请键入:
REG ADD HKLM/Software/MyCo /v Path /t REG_EXPAND_SZ /d ^%systemroot^%
reg compare
比较指定的注册表子项或项。
语法
reg compare KeyName1 KeyName2 [{/v ValueName | /ve}] [{/oa | /od | /os | on}] [/s]
参数
KeyName1
指定要比较的第一个子项的完整路径。要指定远程计算机,请包括计算机名(以 //ComputerName/ 格式表示),并将其作为 KeyName 的一部
分。省略 //ComputerName/ 会导致默认对本地计算机的操作。KeyName 必须包括一个有效的根键。有效根键包括 HKLM、HKCU、HKCR、HKU 以
及 HKCC。如果指定了远程计算机,则有效根键是 HKLM 和 HKU。
KeyName2
指定要比较的第二个子项的完整路径。要指定远程计算机,请包括计算机名(以 //ComputerName/ 格式表示),并将其作为 KeyName 的一部
分。省略 //ComputerName/ 会导致默认对本地计算机的操作。只在 KeyName2 中指定计算机名会导致该操作使用到 KeyName1 中指定的子项的
路径。KeyName 必须包括一个有效的根键。有效根键包括 HKLM、HKCU、HKCR、HKU 以及 HKCC。如果指定了远程计算机,则有效根键是 HKLM
和 HKU。
/v ValueName
指定要比较的子项下的值名称。
/ve
指定只比较值名称为 null 的项。
[{/oa | /od | /os | on}]
指定如何显示比较操作的结果。默认设置是 /od。下表列出了每一个选项。
值 描述
/oa
指定显示所有不同点和匹配点。默认情况下,仅列出不同点。
/od
指定仅显示不同点。这是默认操作。
/os
指定仅显示匹配点。默认情况下,仅列出不同点。
/on
指定不显示任何内容。默认情况下,仅列出不同点。
/s
递归地比较所有子项和项。
/?
在命令提示符处显示 reg compare 的帮助。
注释
? 下表列出了 reg compare 操作的返回值。
值 描述
0
比较成功且结果相同。
1
比较失败。
2
比较成功并找到不同点。
? 下表列出了结果中显示的符号。
符号 描述
=
KeyName1 数据等于 KeyName2 数据
<
KeyName1 数据小于 KeyName2 数据
>
KeyName1 数据大于 KeyName2 数据
示例
要将 MyApp 项下的所有值与 SaveMyApp 项下的所有值进行比较,请键入:
REG COMPARE HKLM/Software/MyCo/MyApp HKLM/Software/MyCo/SaveMyApp
要比较 MyCo 项下的 Version 的值和 MyCo1 项下的 Version 的值,请键入:
REG COMPARE HKLM/Software/MyCo HKLM/Software/MyCo1 /v Version
要将计算机 ZODIAC 上 HKLM/Software/MyCo 下的所有子项和值与当前计算机上 HKLM/Software/MyCo 下的所有子项和值进行比较,请键入:
REG COMPARE //ZODIAC/HKLM/Software/MyCo //。/s
reg copy
将一个注册表项复制到本地或远程计算机的指定位置。
语法
reg copy KeyName1 KeyName2 [/s] [/f]
参数
KeyName1
指定要复制子项的完整路径。要指定远程计算机,请包括计算机名(以 //ComputerName/ 格式表示),并将其作为 KeyName 的一部分。省略
//ComputerName/ 会导致默认对本地计算机的操作。KeyName 必须包括一个有效的根键。有效根键包括 HKLM、HKCU、HKCR、HKU 以及 HKCC。
如果指定了远程计算机,则有效根键是 HKLM 和 HKU。
KeyName2
指定子项目的地的完整路径。要指定远程计算机,请包括计算机名(以 //ComputerName/ 格式表示),并将其作为 KeyName 的一部分。省略
//ComputerName/ 会导致默认对本地计算机的操作。KeyName 必须包括一个有效的根键。有效根键包括 HKLM、HKCU、HKCR、HKU 以及 HKCC。
如果指定了远程计算机,则有效根键是 HKLM 和 HKU。
/s
复制指定子项下的所有子项和项。
/f
不要求确认而直接复制子项。
/?
在命令提示符处显示 reg copy 的帮助。
注释
? 在复制子项时 Reg 不请求确认。
? 下表列出了 reg copy 操作的返回值。
值 描述
0
成功
1
失败
示例
要将 MyApp 项下的所有子项和值复制到 SaveMyApp 项,请键入:
REG COPY HKLM/Software/MyCo/MyApp HKLM/Software/MyCo/SaveMyApp /s
要将计算机 ZODIAC 上的 MyCo 项下的所有值复制到当前计算机上的 MyCo1 项,请键入:
REG COPY //ZODIAC/HKLM/Software/MyCo HKLM/Software/MyCo1
reg delete
从注册表删除子项或项。
语法
Reg delete KeyName [{/v ValueName | /ve | /va}] [/f]
参数
KeyName
指定要删除的子项或项的完整路径。要指定远程计算机,请包括计算机名(以 //ComputerName/ 格式表示),并将其作为 KeyName 的一部分
。省略 //ComputerName/ 会导致默认对本地计算机的操作。KeyName 必须包括一个有效的根键。有效根键包括 HKLM、HKCU、HKCR、HKU 以及
HKCC。如果指定了远程计算机,则有效根键是 HKLM 和 HKU。
/v ValueName
删除子项下的特定项。如果未指定项,则将删除子项下的所有项和子项。
/ve
指定只可以删除为空值的项。
/va
删除指定子项下的所有项。使用本参数不能删除指定子项下的子项。
/f
无需请求确认而删除现有的注册表子项或项。
/?
在命令提示符处显示 reg delete 的帮助。
注释
? 下表列出了 reg delete 操作的返回值。
值 描述
0
成功
1
失败
示例
要删除注册表项 Timeout 以及其所有子项和值,请键入:
REG DELETE HKLM/Software/MyCo/MyApp/Timeout
要删除计算机 ZODIAC 上 HKLM/Software/MyCo 下的注册表值 MTU,请键入:
REG DELETE //ZODIAC/HKLM/Software/MyCo /v MTU
reg export
将本地计算机的指定子项、项和值复制到一个文件中,以便传输到其他服务器。
语法
Reg export KeyName FileName [/y]
参数
KeyName
指定子项的完全路径。Export 操作仅可在本地计算机上工作。KeyName 必须包括一个有效的根键。有效根键包括 HKLM、HKCU、HKCR、HKU 以
及 HKCC。
FileName
指定在操作期间创建的文件的名称和路径。该文件必须具有 .reg 扩展名。
/y
不要求确认即覆盖任何现有的名称为 FileName 的文件。
/?
在命令提示符处显示 reg export 的帮助。
注释
? 下表列出了 reg export 操作的返回值。
值 描述
0
成功
1
失败
示例
要将 MyApp 项的所有子项和值的内容导出到文件 AppBkUp.reg,请键入:
reg export HKLM/Software/MyCo/MyApp AppBkUp.reg
reg import
将包含已导出的注册表子项、项和值的文件的内容复制到本地计算机的注册表中。
语法
Reg import FileName
参数
FileName
指定其内容将复制到本地计算机注册表中的文件的名称和路径。此文件必须使用 reg export 预先创建。
/?
在命令提示符处显示 reg import 的帮助。
注释
? 下表列出了 reg import 操作的返回值。
值 描述
0
成功
1
失败
示例
要从名为 AppBkUp.reg 的文件导入注册表项,请键入:
reg import AppBkUp.reg
reg load
将保存的子项和项写回到注册表的不同子项中。与用于进行疑难解答或编辑注册表项的临时文件一起使用。
语法
reg load KeyName FileName
参数
KeyName
指定要加载的子项的完整路径。要指定远程计算机,请包括计算机名(以 //ComputerName/ 格式表示),并将其作为 KeyName 的一部分。省
略 //ComputerName/ 会导致默认对本地计算机的操作。KeyName 必须包括一个有效的根键。有效根键包括 HKLM、HKCU、HKCR、HKU 以及 HKCC
。如果指定了远程计算机,则有效根键是 HKLM 和 HKU。
FileName
指定要加载的文件的名称和路径。必须使用 .hiv 作为扩展名的 reg save 操作预先创建该文件。
/?
在命令提示符处显示 reg load 的帮助。
注释
? 下表列出了 reg load 操作的返回值。
值 描述
0
成功
1
失败
示例
要将名为 TempHive.hiv 的文件加载到 HKLM/TempHive 项,请键入:
REG LOAD HKLM/TempHive TempHive.hiv
reg quer#
返回位于注册表中指定的子项下的下一层子项和项的列表。
语法
reg query KeyName [{/v ValueName | /ve}] [/s] [/se Separator] [/f Data] [{/k | /d}] [/c] [/e] [/t Type] [/z]
参数
KeyName
指定子项的完全路径。要指定远程计算机,请包括计算机名(以 //ComputerName/ 格式表示),并将其作为 KeyName 的一部分。省略
//ComputerName/ 会导致默认对本地计算机的操作。KeyName 必须包括一个有效的根键。有效根键包括 HKLM、HKCU、HKCR、HKU 以及 HKCC。
如果指定了远程计算机,则有效根键是 HKLM 和 HKU。
/v ValueName
指定要查询的注册表值名称。如果省略,则返回 KeyName 的所有值名称。如果还使用了 /f 选项,则此参数的 ValueName 是可选的。
/ve
查询空白的值名称。
/s
指定该参数递归查询所有子项和值名称。
/se Separator
指定单值分隔符,以搜索 REG_MULTI_SZ 类型的值名称。如果没有指定 Separator,则使用“/0”。
/f Data
指定要搜索的数据或模式。如果字符串包含空格,则使用双引号。如果未指定,则使用通配符 ("*") 作为搜索模式。
/k
指定只在项名称中搜索。
/d
指定只在数据中搜索。
/c
指定查询是区分大小写的。默认情况下,查询是不区分大小写的。
/e
指定只返回完全匹配项。默认情况下,返回所有匹配项。
/t Type
指定要搜索的注册表类型。有效的类型包括:REG_SZ、REG_MULTI_SZ、REG_EXPAND_SZ、REG_DWORD、REG_BINARY、REG_NONE。如果未指定,则
搜索所有类型。
/z
指定在搜索结果中包括注册表类型的数字同等物。
/?
在命令提示符处显示 reg query 的帮助。
注释
? 下表列出了 reg query 操作的返回值。
值 描述
0
成功
1
失败
示例
要显示 HKLM/Software/Microsoft/ResKit 项中的名称值 Version 的值,请键入:
REG QUERY HKLM/Software/Microsoft/ResKit /v Version
要显示远程计算机 ABC 上的 HKLM/Software/Microsoft/ResKit/Nt/Setup 项下的所有子项和值,请键入:
REG QUERY //ABC/HKLM/Software/Microsoft/ResKit/Nt/Setup /s
要使用“#”作为分隔符显示 REG_MULTI_SZ 类型的所有子项和值,请键入:
REG QUERY HKLM/Software/Microsoft/ResKit/Nt/Setup /se #
要显示数据类型 REG_SZ 的 HKLM 根下的“SYSTEM”的完全匹配并且区分大小写的匹配项的项、值和数据,请键入:
REG QUERY HKLM /f SYSTEM /t REG_SZ /c /e
要显示数据类型 REG_BINARY 的根键 HKCU 下的数据中的“0F”的匹配项的项、值和数据,请键入。
REG QUERY HKCU /f 0F /d /t REG_BINARY
要显示 HKLM/SOFTWARE 下的值名称 null(默认值)的值和数据,请键入:
REG QUERY HKLM/SOFTWARE /ve
reg restore
将保存的子项和项写回到注册表。
语法
Reg restore KeyName FileName
参数
KeyName
指定要还原的子项的完整路径。Restore 操作仅在本地计算机上工作。KeyName 必须包括一个有效的根键。有效根键包括 HKLM、HKCU、HKCR、
HKU 以及 HKCC。
FileName
指定其内容将写回到注册表中的文件的名称和路径。必须使用 .hiv 作为扩展名的 reg save 操作预先创建该文件。
/?
在命令提示符处显示 reg restore 的帮助。
注释
? 编辑任何注册表项之前,请使用 reg save 操作保存父子项。如果编辑失败,则可以使用 reg restore 操作还原原来的子项。
? 下表列出了 reg restore 操作的返回值。
值 描述
0
成功
1
失败
示例
要将名为 NTRKBkUp.hiv 的文件还原到 HKLM/Software/Microsoft/ResKit 项,并覆盖该项的现有内容,请键入:
REG RESTORE HKLM/Software/Microsoft/ResKit NTRKBkUp.hiv
reg save
将指定的子项、项和注册表值的副本保存到指定文件中。
语法
reg save KeyName FileName [/y]
参数
KeyName
指定子项的完全路径。要指定远程计算机,请包括计算机名(以 //ComputerName/ 格式表示),并将其作为 KeyName 的一部分。省略
//ComputerName/ 会导致默认对本地计算机的操作。KeyName 必须包括一个有效的根键。有效根键包括 HKLM、HKCU、HKCR、HKU 以及 HKCC。
如果指定了远程计算机,则有效根键是 HKLM 和 HKU。
FileName
指定所创建的文件的名称和路径。如果未指定路径,则使用当前路径。
/y
不要求确认即覆盖任何现有的名称为 FileName 的文件。
/?
在命令提示符处显示 reg save 的帮助。
注释
? 下表列出了 reg save 操作的返回值。
值 描述
0
成功
1
失败
? 编辑任何注册表项之前,请使用 reg save 操作保存父子项。如果编辑失败,则可以使用 reg restore 操作还原原来的子项。
示例
要将配置单元 MyApp 作为名为 AppBkUp.hiv 的文件保存到当前文件夹中,请键入:
REG SAVE HKLM/Software/MyCo/MyApp AppBkUp.hiv
reg unload
使用 reg load 操作删除已加载的部分注册表。
语法
reg unload KeyName
参数
KeyName
指定要卸载的子项的完整路径。要指定远程计算机,请包括计算机名(以 //ComputerName/ 格式表示),并将其作为 KeyName 的一部分。省
略 //ComputerName/ 会导致默认对本地计算机的操作。KeyName 必须包括一个有效的根键。有效根键包括 HKLM、HKCU、HKCR、HKU 以及 HKCC
。如果指定了远程计算机,则有效根键是 HKLM 和 HKU。
/?
在命令提示符处显示 reg unload 的帮助。
注释
? 下表列出了 reg unload 操作的返回值。
值 描述
0
成功
1
失败
示例
要卸载 HKLM 中的配置单元 TempHive,请键入:
REG UNLOAD HKLM/TempHive