システムレベルの構成を含むシステムPATH変数があります。ユーザーPATH変数を使用して、ユーザー固有の構成でPATHを補完します。
ユーザーPATH変数を更新するコマンドラインから、たとえばsetxで実行したいと思います。
しかし、setxで既存のユーザーパスを参照する方法がわかりません。
次のコマンドで(/ Mなしのsetx)
setx PATH c:\my-user-specifc-bin-path;%PATH%
最初のPATHはユーザーPATHを意味しますが、2番目の%PATH%は「フル」(ユーザー+システム)PATHに置き換えられます。
つまり、システムパス全体がユーザーPATHで複製されることになります。最終的には、私が望んでいるものとは異なります。
私はしたいと思います:
PowerShellバージョン、ユーザーのPATHを設定:
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "C:\MyPath1"
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "$((Get-ItemProperty -path HKCU:\Environment\ -Name Path).Path);C:\MyPath1"
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "C:\MyPath1;$((Get-ItemProperty -path HKCU:\Environment\ -Name Path).Path)"
以前の値を上書きするユーザーPATHを設定するには:
setx PATH "C:\MyPath1"
既存のユーザーPATHに値 "C:\ MyPath0"を追加するには:
for /f "skip=2 tokens=3*" %a in ('reg query HKCU\Environment /v PATH') do @if [%b]==[] ( @setx PATH "C:\MyPath0;%~a" ) else ( @setx PATH "C:\MyPath0;%~a %~b" )
値 "C:\ MyPath2"を既存のユーザーパスに追加するには:
for /f "skip=2 tokens=3*" %a in ('reg query HKCU\Environment /v PATH') do @if [%b]==[] ( @setx PATH "%~a;C:\MyPath2" ) else ( @setx PATH "%~a %~b;C:\MyPath2" )
ユーザーPATHにスペースが含まれる場合と含まれない場合があるため、if-else条件が必要です。必要に応じて、コマンドを引数として設定/先頭に追加/追加する値を受け入れる汎用バッチファイル(%記号をそれぞれ2倍にする)として保存できます。
バッチファイル
:: PATH-ADD - add a path to user path environment variable
@echo off
setlocal
:: set user path
set ok=0
for /f "skip=2 tokens=3*" %%a in ('reg query HKCU\Environment /v PATH') do if [%%b]==[] ( setx PATH "%%~a;%1" && set ok=1 ) else ( setx PATH "%%~a %%~b;%1" && set ok=1 )
if "%ok%" == "0" setx PATH "%1"
:end
endlocal
echo.
SETX /M
が必要、デフォルトSETX
がHKEY_CURRENT_USER
に設定
SETX /M PATH c:\my-bin-path;%PATH%
これはうまくいくようです:
setx PATH "c:\my-user-specifc-bin-path-which-may-contain-spaces;"%%PATH%%