仔细想一下这个操作应该算是简单,要加入时基本都是在命令行下,直接使用 set 或 path 命令都可以。
可为啥总是很抗拒呢?应该是最终要输入 %PATH% 这个变量,大写不好输入吧。
正好学习rust,就想写个小程序试一下。发动所有的AI开始写,结果并不是很成功。
path这个环境变量在windows上有两个地方:一个是全局的,一个是用户的。使用程序可以分别指定修改这两个环境变量。AI也确实做到了。但环境变量改了,当前打开的窗口中并没有改变。程序运行中止后,环境又恢复了。AI提议说发个广播消息,通知所有打开的窗口环境变量改变了。但好像并没啥子用。
那换成批处理吧,肯定是可行的。这么简单的功能直接写个cmd文件如下:
@echo off
if "%1" == "" (
echo Usage: ap /add/path/to/current/environment
) else (
rem echo %1
SET PATH=%PATH%;%1
)
结果,这个代码跑不了,报错:此时不应有 \Windows。
费劲调试了半天,干脆还是问AI吧,一般的AI还搞不定。最后还是gemini 2.0给了以下的解决方案:
@echo off
if "%~1" == "" (
echo Usage: ap /add/path/to/current/environment
) else (
set "new_path=%PATH%;%~1"
setx PATH "%new_path%"
)
看着好像差不多,但真的能用。还给了解释如下:
修改说明
"%~1"
:%~1
会移除第一个参数的周围的引号, 这样可以兼容带引号和不带引号的参数,并且能避免空格带来的问题。"%~1"
使用双引号包裹参数,可以确保正确处理包含空格的路径。
set "new_path=%PATH%;%~1"
:- 使用
set "variable=value"
形式设置变量, 确保正确处理包含空格和特殊字符的路径。 - 先创建一个临时变量 new_path, 将当前 path 和 参数进行拼接。
- 使用
setx PATH "%new_path%"
:setx
命令是用来永久设置环境变量的命令, 可以将变量写入到注册表中。- 将更新后的路径设置到 PATH 环境变量。 注意, 需要使用双引号来包裹路径。
改进后的脚本优点
正确处理空格和特殊字符: 使用 “%~1” 和 set “variable=value” 可以正确处理路径中的空格和特殊字符
永久设置环境变量: 使用 setx 命令可以永久设置环境变量,使得修改在新的 cmd 窗口中也生效。
避免临时的环境变量影响: 先将环境变量拼接好, 然后再一起设置,可以避免临时的环境变量影响。