Board logo

标题: 怎么写一个自动完成系统环境变量添加的脚本 [打印本页]

作者: ffo1984     时间: 2006-10-24 22:21    标题: 怎么写一个自动完成系统环境变量添加的脚本

我们公司有一个软件安装好后需要添加环境变量才能运行,因为数量太多,有点烦人,想写一个自动完成系统环境变量添加的脚本,有人会吗?
作者: electronixtar     时间: 2006-10-24 22:38
2003/Vista下倒是有个 setx ,在XP下只能通过reg/regedit改注册表了。
作者: ffo1984     时间: 2006-10-25 08:03
这样啊!谢谢哦!看来老兄们已将享受上新的操作系统了!
作者: lxmxn     时间: 2006-10-25 08:11

set path="c:\windows\help";%path%
  其中"c:\windows\help"只是个示范,可以把很多路径加到里面,不过别忘了中间加上";"分隔每个路径。这样不能永久的设置环境变量,只能临时用一下。要使设置的环境变量长期有效,只有手工改一下系统环境变量了,或者修改注册表。

作者: vkill     时间: 2006-10-25 08:52
数量太多?? 路径很多吗?
作者: chenall     时间: 2006-10-25 09:26
使用VBS
dim wsh
Set wsh = WScript.CreateObject("WScript.Shell")
wsh.Environment("system").Item("<变量名>")="<值>"
或使用使用REG
set regpath=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
::系统环境变量
::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
::用户环境变量
::HKEY_CURRENT_USER\Environment
reg add "%regpath%" /v "<name>" /d "<data>"
将上面的<>内容替成你需要定义的名称和值就可以了.
作者: alucifer     时间: 2006-12-27 08:25
如果我要给path设置值,怎么用reg add 加啊?  就是不改变path原有的值,加上我需要的值。
能写下具体怎么做么?
万分感谢!!
作者: HUNRYBECKY     时间: 2006-12-27 21:24
path在注册表中为二进制表示,不是很好操作。
作者: alucifer     时间: 2006-12-27 21:49
没有那么麻烦吧,就是象6楼说的,用:
set regpath=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
reg add "%regpath%" /v "Path" /d "<data>"

但是这样会覆盖Path原来的值。
我试了试这样写:
set  regpath=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
set  Path=<data>;%Path%
reg add "%regpath%" /v "Path" /d "%Path%"

但是出现 error : too many command-line  .......

我的想法就是把原来的值倒出,修改后再导入,但是不熟悉dos命令。。。。
作者: HUNRYBECKY     时间: 2006-12-27 22:16
我找到一个非常好的方法。就是利用AUTOEXEC.BAT中的SET PATH。这个原理我不是很清楚,但是已经试验成功,我也觉得很奇怪。据说WINNT都不使用AUTOEXEC.BAT了,但事实并非如此,大家做一个小实验,看你们的电脑上能否成功。
追加PATH路径而不覆盖原有路径:如果你系统盘没有AUTOEXEC.BAT,那么就建立一个,在里面追加内容SET PATH=D:\;E:\;F:\;G:\;
重新启动电脑,奇迹出现了,使用set path查看下你的PATH变量吧,居然把AUTOEXEC.BAT中设置的变量添加到了PATH变量中。真是奇怪.
作者: HUNRYBECKY     时间: 2006-12-27 22:17
试验成功的跟帖,上面的路径可以改变成任何自己需要的路径,但必须注意每个路径后必须使用;来分开.
作者: alucifer     时间: 2006-12-27 22:23
感谢hunrybecky, 但是真的无法通过修改注册表来添加Path吗? 
期待帮助。。。。。
作者: HUNRYBECKY     时间: 2006-12-27 22:30
能够,我开始也想到通过注册表来添加,但是想到因为是使用的可扩展的字符(更改我开始说的是二进制,最后查得知是可扩展字符串,抱歉),导出注册表的是长串的数字,所以就放弃了,而意外的发现刚才哪个利用AUTOEXEC.BAT的方法.现在使用注册表的方法也已经成功,实际上可扩展字符也不影响,直接使用一般的REG_SZ就可以了.方法补如下:
@ECHO OFF
SET SE=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
REG ADD "%SE%" /V Path /t REG_EXPAND_SZ /d %PATH%G:\ACCESS; /f
@ECHO ON

注意的是%SPATH%G:\ACCESS;注意原来的变量与添加的之间没有;
作者: zh159     时间: 2006-12-27 22:30
XP应该是不会执行AUTOEXEC.BAT,却会解析AUTOEXEC.BAT中的一些变量,路径就是其中一个。
作者: HUNRYBECKY     时间: 2006-12-27 22:33


  Quote:
Originally posted by zh159 at 2006-12-27 22:30:
XP应该是不会执行AUTOEXEC.BAT,却会解析AUTOEXEC.BAT中的一些变量,路径就是其中一个。

是的,从这个例子可以说明兄的观点,而且更有意思的是,AUTOEXEC.BAT中设置的变量是添加到现有的变量中而不是替代,所以利用这个东西,应该可以做很多有意思的事情了.
作者: HUNRYBECKY     时间: 2006-12-27 22:56
经过多次实验表明:使用AUTOEXEC.BAT的确能添加变量,添加的变量不会写入注册表中的相关项,同时也不会出现在"我的电脑"中的用户和系统变量列表中,但是这些变量是可以发挥作用的,我使用AUTOEXEC.BAT添加LANG=CHS后proe可以从英文版本变成中文版,把LANG=EN可变成英文了,哈哈,真有意思,我添加了SET PATH=E:\ACAD2000;E:\ACAD2000\Autodesk Shared;变量后我的绿色AUTOCAD就再也不出现找不到路径的提示了,说明autoexec.bat中的变量的确是个好东西。
作者: alucifer     时间: 2006-12-28 01:23
非常感谢hunrybecky , 我这也试验成功了。
作者: qzwqzw     时间: 2006-12-28 21:47
注册表中的PATH是sz还是expand_sz,具体取决于环境变量的取值

如果环境变量中嵌套引用环境变量,则必须使用expand_sz,否则使用二者都是可以的

xp下autoexec的问题搜索以前的帖子看看吧

http://www.cn-dos.net/forum/view ... ge=1&highlight=
作者: HUNRYBECKY     时间: 2006-12-28 22:38


  Quote:
Originally posted by qzwqzw at 2006-12-28 21:47:
注册表中的PATH是sz还是expand_sz,具体取决于环境变量的取值

如果环境变量中嵌套引用环境变量,则必须使用expand_sz,否则使用二者都是可以的

xp丠...

根据兄的观点,我去查了一些资料和对比了注册表,发现好象也不是很准确,MS给的解释是这样的:REG_SZ 表示长度固定的文本字符串;而REG_EXPAND_SZ 表示长度可变的数据字符串,这种数据类型包括程序或服务使用该数据时解析的变量。 见http://support.microsoft.com/kb/256986/
按照MS的解释那么程序或服务使用的路径都应该使用REG_EXPAND_SZ 类型,但是我把用户的环境变量TEMP设置成REG_SZ也可以同样解析到,我就有点不懂,谁能给一个比较完整合理的解释呢?

还有,我对注册表的这个两个类型的数据进行了对比,发现一般固定的文本都使用的是REG_SZ,而只要使用了带%%变量的路径都使用的是REG_EXPAND_SZ,也许这就是所谓的固定和不固定吧.
作者: HUNRYBECKY     时间: 2006-12-28 22:42
刚才又找到一些资料,这里是这样解释的,比较合理:
REG_SZ
REG_SZ代表一个简单的文本字符串,它是注册表中最常见的一种数据类型,在字符串编辑器对话框中可以输入许多类型的信息,如名称、路径、标题或说明文字等。REG_SZ也可以是一个数字,例如可用来表示RGB颜色色码,或者版本号等其他类型的信息。

REG_EXPAND_SZ
代表一个可扩展的字符串。其编辑器和标准REG_SZ字符串编辑类似,只是在变量用法上有所差异。在REG_EXPAND_SZ编辑器中输入变量时,系统会将它当作变量看待。激活此变量时,会显示变量的具体值。
例如在对话框中的“%SYSTEMROOT%”是一个变量名,激活它之后,会返回到Windows XP所在的目录。
http://www.pcdog.com/book/html/20041025/25102004325_1.htm