更安全的 SETX
对@Nafscript的初始SETX答案的所有注释点头。
默认情况下SETX将更新您的用户路径。
对于SETX……/M将更新您的系统路径。
%PATH%包含附加用户路径的系统路径
警告
备份你的路径- SETX将截断你的垃圾超过1024个字符
不要调用SETX %PATH%;xxx -将系统路径添加到用户路径中
不要调用SETX %PATH%;xxx /M -将用户路径添加到系统路径中
过度使用批处理文件会导致盲目
ss64 SETX页面有一些非常好的例子。重要的是,它指向了SETX vs SETX /M的注册表项的位置
用户变量:
HKCU \环境
系统变量:
HKLM \ SYSTEM \ CurrentControlSet \ \会话管理器\环境控制
使用说明
附加到用户路径
append_user_path.cmd
@ECHO OFF
REM usage: append_user_path "path"
SET Key="HKCU\Environment"
FOR /F "usebackq tokens=2*" %%A IN (`REG QUERY %Key% /v PATH`) DO Set CurrPath=%%B
ECHO %CurrPath% > user_path_bak.txt
SETX PATH "%CurrPath%";%1
附加到系统路径
append_system_path.cmd。必须以管理员身份运行。
(除了Key和SETX /M修饰符不同之外,基本上是一样的。)
@ECHO OFF
REM usage: append_system_path "path"
SET Key="HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
FOR /F "usebackq tokens=2*" %%A IN (`REG QUERY %Key% /v PATH`) DO Set CurrPath=%%B
ECHO %CurrPath% > system_path_bak.txt
SETX PATH "%CurrPath%";%1 /M
选择
最后,ss64 SETX页面推荐了一个名为SETENV的改进版本,它将设置用户或系统环境变量分开。
例子
下面是在Windows 7上设置PATH环境变量的完整示例。该示例在尝试更改值之前检测软件是否已经添加到PATH。与上面给出的例子有一些小的技术差异:
@echo off
set OWNPATH=%~dp0
set PLATFORM=mswin
if defined ProgramFiles(x86) set PLATFORM=win64
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" set PLATFORM=win64
if exist "%OWNPATH%tex\texmf-mswin\bin\context.exe" set PLATFORM=mswin
if exist "%OWNPATH%tex\texmf-win64\bin\context.exe" set PLATFORM=win64
rem Check if the PATH was updated previously
echo %PATH% | findstr "texmf-%PLATFORM%" > nul
rem Only update the PATH if not previously updated
if ERRORLEVEL 1 (
set Key="HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
for /F "USEBACKQ tokens=2*" %%A in (`reg query %%Key%% /v PATH`) do (
if not "%%~B" == "" (
rem Preserve the existing PATH
echo %%B > currpath.txt
rem Update the current session
set PATH=%PATH%;%OWNPATH%tex\texmf-%PLATFORM%\bin
rem Persist the PATH environment variable
setx PATH "%%B;%OWNPATH%tex\texmf-%PLATFORM%\bin" /M
)
)
)
1. 并不完全正确