【power shell & batch】写了个简单的添加环境变量的脚本
### 缘起想使用 notepad 打开记事本一样,打开heynote,结果一时手贱错点删掉了一个用户变量,想不起来是哪一个程序路径了,为此写一个配置用户变量的脚本,方便以后省事。
### 功能设计
由于我不想管那么多,大多数情况都是加 PATH 上,所以用户、系统环境变量都加上,也没在想着去单独创建变量。
* 读取计算机/用户 Path,将变量值导出成txt到桌面
* 保留以前的Path,在这基础上追加,而不是覆盖掉整个Path
* 再次追加时,不会出现相同的路径重复追加。
* 追加导出位置提醒(代码效果测试完成后才想起)
### 效果
示例路径
* "C:\Program Files\Heynote\"
* "D:\hitomi\"
*"C:\Program Files\ToDesk"
![](https://cdn.jsdelivr.net/gh/hoochanlon/scripts/AQUICK/PixPin_2024-04-14_16-11-59.png)
![](https://cdn.jsdelivr.net/gh/hoochanlon/scripts/AQUICK/PixPin_2024-04-14_16-16-01.png)
### 附源码
powershell
* https://github.com/hoochanlon/scripts/blob/main/d-pwsh/add_env_path.ps1
```
# 接受用户输入的新路径
$newPath = Read-Host "请输入要添加的新路径"
# 获取桌面路径
$desktopPath = ::GetFolderPath("Desktop")
# 备份当前用户的 PATH 环境变量到桌面的文本文件
$currentUserPath = ::GetEnvironmentVariable("PATH", "User")
$currentUserPath | Out-File -FilePath "$desktopPath\user_path_backup.txt"
# 如果新路径不存在于当前用户的 PATH 环境变量中,则添加新路径
if ($currentUserPath -notlike "*$newPath*") {
$currentUserPath += ";$newPath"
::SetEnvironmentVariable("PATH", $currentUserPath, ::User)
}
# 备份计算机的 PATH 环境变量到桌面的文本文件
$systemPath = ::GetEnvironmentVariable("PATH", "Machine")
$systemPath | Out-File -FilePath "$desktopPath\system_path_backup.txt"
# 如果新路径不存在于计算机的 PATH 环境变量中,则添加新路径
if ($systemPath -notlike "*$newPath*") {
$systemPath += ";$newPath"
::SetEnvironmentVariable("PATH", $systemPath, ::Machine)
}
# 提示修改完成
Write-Host "环境变量已修改"
Write-Host"用户变量备份在桌面的 user_path_backup.txt 文件中"
Write-Host"系统变量备份在桌面的 system_path_backup.txt 文件中"
Write-Host `n;
# 显示修改后的 PATH 环境变量
Write-Host "修改后的计算机 PATH 环境变量:"
::GetEnvironmentVariable("PATH", "Machine")
Write-Host `n;
Write-Host "修改后的用户 PATH 环境变量:"
::GetEnvironmentVariable("PATH", "User")
```
bat
* https://github.com/hoochanlon/scripts/blob/main/d-bat/add_env_path.bat
```
@echo off
REM 提示用户输入新路径
set /p newPath=请输入要添加的新路径:
REM 获取桌面路径
set "desktopPath=%userprofile%\Desktop"
REM 备份当前用户的 PATH 环境变量到桌面的文本文件
powershell -Command "::GetEnvironmentVariable('PATH', 'User')" > "%desktopPath%\user_path_backup.txt"
REM 如果新路径不存在于当前用户的 PATH 环境变量中,则添加新路径
powershell -Command "$currentUserPath = ::GetEnvironmentVariable('PATH', 'User'); if ($currentUserPath -notlike '*%newPath%*') { $currentUserPath += ';%newPath%'; ::SetEnvironmentVariable('PATH', $currentUserPath, ::User) }"
REM 备份计算机的 PATH 环境变量到桌面的文本文件
powershell -Command "::GetEnvironmentVariable('PATH', 'Machine')" > "%desktopPath%\system_path_backup.txt"
REM 如果新路径不存在于计算机的 PATH 环境变量中,则添加新路径
powershell -Command "$systemPath = ::GetEnvironmentVariable('PATH', 'Machine'); if ($systemPath -notlike '*%newPath%*') { $systemPath += ';%newPath%'; ::SetEnvironmentVariable('PATH', $systemPath, ::Machine) }"
REM 提示修改完成
echo 环境变量已修改
echo 用户变量备份在桌面的 user_path_backup.txt 文件中
echo 系统变量备份在桌面的 system_path_backup.txt 文件中
echo.
REM 显示修改后的 PATH 环境变量
echo 修改后的计算机 PATH 环境变量:
powershell -Command "::GetEnvironmentVariable('PATH', 'Machine')"
echo.
echo 修改后的用户 PATH 环境变量:
powershell -Command "::GetEnvironmentVariable('PATH', 'User')"
pause
```
### 参考文献
* [关于环境变量 - PowerShell | Microsoft Learn](https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_environment_variables?view=powershell-7.4)
* (https://sysin.org/blog/windows-env/)
* (https://stackoverflow.com/questions/848859/use-notlike-to-filter-out-multiple-strings-in-powershell)
* [关于比较运算符 - PowerShell | Microsoft Learn](https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_comparison_operators?view=powershell-7.4) JAVA的有吗 海是倒过来的天 发表于 2024-4-14 19:20
JAVA的有吗
你可以看这篇帖子,写了有一年多了
[批处理]一键下载安装配置 Java
https://www.52pojie.cn/thread-1767872-1-1.html
(出处: 吾爱破解论坛)
快捷备份一下环境变量 防止手残确实可以 学习学习,感谢分享心得
感谢分享
本帖最后由 52PJ070 于 2024-4-15 06:18 编辑
感谢原创分享!
可以运行了。之前下载的文件格式有问题。 梦回一边上班一边架游戏和同事朋友联机的日子 不错叻,很细
页:
[1]