【DevChat】使用bat修改环境变量path的值

发布时间 2023-09-27 16:23:02作者: jack_Meng

今天尝试使用DevChat插件进行脚本编程,随然没有100%满足我的需求,不过也挺厉害了,具体如下:

需求:

使用批处理查找环境变量path是否存在BAT_HOME,如果存在则删除,如果不存在则添加

方案一:使用setx操作环境变量

在Windows系统中,你可以使用以下的批处理脚本来实现你的需求。这个脚本会检查环境变量PATH中是否存在BAT_HOME的路径,如果存在则删除,如果不存在则添加。

@echo off
setlocal enabledelayedexpansion

:: 指定需要检查的路径
set "pathToCheck=%BAT_HOME%"

:: 获取当前的PATH环境变量
set "pathVar=%PATH%"

:: 检查PATH环境变量中是否存在指定的路径
echo %pathVar% | findstr /C:"%pathToCheck%" 1>nul

if errorlevel 1 (
    echo Path not found. Adding it.
    setx Path "%pathVar%;%pathToCheck%"
) else (
    echo Path found. Removing it.
    set "newPathVar=%pathVar:;%pathToCheck%=%"
    setx Path "%newPathVar%"
)

endlocal

请注意,这个脚本只能在命令提示符(cmd.exe)中运行,而不能在PowerShell中运行。另外,setx命令会永久地修改环境变量,如果你只想临时地修改环境变量,你可以使用set命令代替setx命令。

 

 

我考虑环境变量经常会使用JAVA_HOME这样类似的环境变量,接着我又想通过注册表来更改环境变量,我又给出如下要求

需求:

使用批处理操作注册表,查找环境变量path是否存在BAT_HOME,如果存在则删除,如果不存在则添加

 

方式二:通过操作注册表

在Windows系统中,你可以使用以下的批处理脚本来实现你的需求。这个脚本会检查注册表中的环境变量PATH是否包含BAT_HOME的路径,如果存在则删除,如果不存在则添加。

@echo off
setlocal enabledelayedexpansion

:: 指定需要检查的路径
set "pathToCheck=%BAT_HOME%"

:: 获取当前的PATH环境变量
for /F "tokens=2*" %%a in ('reg query "HKCU\Environment" /v Path ^| findstr /i path') do set "pathVar=%%b"

:: 检查PATH环境变量中是否存在指定的路径
echo %pathVar% | findstr /C:"%pathToCheck%" 1>nul

if errorlevel 1 (
    echo Path not found. Adding it.
    reg add "HKCU\Environment" /v Path /d "%pathVar%;%pathToCheck%" /f
) else (
    echo Path found. Removing it.
    set "newPathVar=%pathVar:;%pathToCheck%=%"
    reg add "HKCU\Environment" /v Path /d "%newPathVar%" /f
)

endlocal

请注意,这个脚本只能在命令提示符(cmd.exe)中运行,而不能在PowerShell中运行。另外,reg add命令会永久地修改注册表,如果你只想临时地修改环境变量,你可以使用set命令代替reg add命令。

此外,修改注册表可能会影响系统的稳定性,所以在运行这个脚本之前,你应该先备份你的注册表。

 

总结

整体感觉还不错,虽然这些代码都很简单,也都是常用的,以节省人力一点一点的敲代码的时间,但是如果想应用到生产系统上,还需要做进一步的微调和测试。

后续有时间,再去优化和测试吧。