7C00.ME/houmu 2012-03-25

那些年,我写过的设置Windows系统变量的vbs脚本

下面是我之前整理过的三段vbs代码,他们的主要都是用于快速设置Windows系统变量的。这些代码,在使用的过程中,都做了很多修改,已经记不清最初从哪里学来的了。

第一段:

Set WshShell=CreateObject("WScript.Shell")
Set WshEnv=WshShell.Environment("User")
'WScript.Echo(WshShell.currentdirectory&"\Python27")
WshEnv.Item("Path") = WshEnv.Item("Path")&";"&WshShell.currentdirectory&"\Python27;"
WScript.Echo(WshEnv.Item("Path"))

这个代码用于添加当前目录下的Python27目录到(用户)系统变量Path上。最初的用途是,把Python27安装目录、Editplus(经过一些配置)和这个vbs打包,可以用于快速搭建Python的开发环境,其中Editplus是编辑器,Python是解释器,Editplus经过了一些设置有代码高亮、自动所经等功能(代码自动补全由于做得不怎么好,被我放弃了),可以通过快捷键方便运行Python代码。这几样东西加起来用7z压缩,还不到9M。当初学Python的时候,这个工具包是随身携带,随时可用的。

第二段:

curdir = createobject("Scripting.FileSystemObject").GetFolder(".").Path
regpath="HKEY_CURRENT_USER\Environment\"
set  ws=wscript.createobject("wscript.shell")
temp=ws.regwrite(regpath & "LM_LICENSE_FILE",curdir&"\license.dat")

这段代码用于添加用户系统变量的一个项LM_LICENSE_FILE,值为当前目录下的license.dat的完整路径,这其实是用于Modelsim的破解的。上学期学习Verilog,需要使用Modelsim。经过研究,Modelsim是用Tcl写的界面,软件本身有绿色软件的性质。我把一些安装时产生的文档,和VHDL等其他语言的示例和库文件等删除,配合破解程序和这段vbs脚本,完成了一个快速可用的Modelsim+Verilog开发工具包,压缩包只有19M,解压之后,几个点击和双击就可以使用了,比超大的原始安装程序的安装要快和轻便了很多。

第三段:

curdir = createobject("Scripting.FileSystemObject").GetFolder(".").Path   
regpath="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\"  
set  ws=wscript.createobject("wscript.shell")   
temp=ws.regwrite(regpath & "JAVA_HOME",curdir)   
temp=ws.regwrite(regpath & "CLASSPATH",".;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar")   
oldpath=ws.regread(regpath & "PATH")   
newpath=oldpath & ";%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin"   
 ws.Environment("system").Item("PATH")=newpath   
temp=ws.regread(regpath & "PATH")   
wscript.echo "ok"

这段代码是用于配置Jdk的,双击之后,可以立即完成PATH、CLASSPATH等系统变量的设置,比从系统属性上要快很多。当然也可以和上面的代码一样完成“绿色版”JDK工具包。这段代码在Windows XP上没有什么问题,似乎在Windows 7下需要修改一下。

第三段代码最值得品味的一行是

temp=ws.regread(regpath & "PATH")

这行看似没有什么用处,其实不然。vbs通过WScript.Shell对象设置系统变量,但是只有修改和删除的直接方法,修改就是用等号赋值,删除使用remove方法,而增加系统变量的直接方法,微软没有提供,在一些文档上也是这么说的。于是想添加系统变量,就得另辟蹊径,操作注册表,vbs可以操作注册表,但是单单写注册表项并不能立即生效,只有在重新登录后才有用,使用读注册表regread,似乎就是为了解决这个问题。上面的第二段代码也没有注意到这个问题。