想着每次手动设置环境变量还是很麻烦,我决定使用setx命令加之批处理实现。在使用这个命令的过程中也踩了很多坑,在此想做一个总结。
setx用法:
设置用户环境变量
setx "变量名" "变量值"
设置计算机(全局)环境变量
setx "变量名" "变量值" /m
可见,在最后加上 /m即可设置全局环境变量。
用法还是非常简单的。
常见错误:
1,错误: 无效语法。默认选项不允许超过 '2' 次。
这是由于设定变量值中间包含空格导致。所以使用这个命令的时候,变量名和变量值最好都用英文引号包围。
例如:
setx "a" "a a" √
setx "a" a a ×
2,错误: 拒绝访问注册表路径。
在设置全局变量时需要有管理员权限,右键-以管理员身份运行cmd即可。
3,警告: 正保存的数据被裁断到 1024 字符。
设置的变量值太长。
变量值中的特殊符号处理:
假设我们要设定的变量值里面包含特殊符号,而我们又希望这些特殊符号原封不动地被设置进去,应当如何操作呢?
1,"
英文双引号一般会被当做字符串开始或者结束。若要表示英文分号在变量值中,可以使用\"代替。
例如:
setx "t" "a\"b\"c" /m
运行后效果:
2,%
总所周知,两个百分号包围的东西在命令行里面会被当做变量直接带值。
而例如Java的环境变量配置中,我们知道要在Path后面加上%JAVA_HOME%\bin这个值。
而如果直接使用setx命令为Path追加Java环境变量的话:
setx "Path" "%Path%;%JAVA_HOME%\bin" /m
效果:
可见,他直接把JAVA_HOME变量的值带进去了,而这没达到我们的预期:就是直接在Path里面写入%JAVA_HOME%\bin而不是把JAVA_HOME的值带进去(把%JAVA_HOME%原封不动地写进去)。
这时,对于你不想替换的变量,就如下操作:
setx命令中,若想不展开%的变量引用,用^%来代替%即可。例如我设定classpath变量值为.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar,命令如下:
setx "classpath" ".;"^%JAVA_HOME^%"\lib\dt.jar;"^%JAVA_HOME^%"\lib\tools.jar" /m
需要注意的是,对值引用的那一段语句不能用引号包围,其余的最好用引号包围,然后接在一起,还是仔细观察上述命令:
效果:
可见通过此方式可以不展开值引用直接设定。