コマンドラインからPATHユーザー環境変数を更新する方法


12

システムレベルの構成を含むシステムPATH変数があります。ユーザーPATH変数を使用して、ユーザー固有の構成でPATHを補完します。

たとえばsetxを使用して、コマンドラインからユーザーPATH変数更新したいと思います。

しかし、setxで既存のユーザーパスを参照する方法がわかりません。

次のコマンドで(/ Mなしのsetx)

setx PATH c:\my-user-specifc-bin-path;%PATH%

最初のPATHはユーザーPATHを意味しますが、2番目の%PATH%は「フル」(ユーザー+システム)PATHに置き換えられます。

つまり、システムパス全体がユーザーPATHで複製されることを意味します。

私はしたいと思います:

  • ユーザーPATH環境変数のみに影響します
  • 既存の値に1つ以上のパス要素を追加/付加する
  • コマンドラインから実行してください。

を使用;%PATH%するときに、既存のパス(システムパスから派生したもの)を追加するように求めているように思えます。
ダニエルRヒックス2013年

回答:


3

PowerShellバージョン、ユーザーのPATHを設定:

  1. 現在のユーザーに新しいPATH(上書き)を設定します。
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "C:\MyPath1"
  1. 現在のユーザーPATHに追加を設定します。
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "$((Get-ItemProperty -path HKCU:\Environment\ -Name Path).Path);C:\MyPath1"
  1. prependを現在のユーザーPATHに設定します。
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "C:\MyPath1;$((Get-ItemProperty -path HKCU:\Environment\ -Name Path).Path)"

12

以前の値を上書きするユーザーPATHを設定するには:

setx PATH "C:\MyPath1"

既存のユーザーパスの前に値「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.

1
詳細な説明が必要です。%aとは何ですか、%bとは何ですか?
OfusJK 2014年

残念ながら、ユーザーPATHがまだ定義されていない場合は機能しません:(
nowox

@KJK:for /?あなたが知る必要があるすべてを教えてくれます。:)私はそれをすべてここに不必要に複製したくなかったし、情報はとにかく簡単に理解できるだろうと思った。
Karan 2015

このコードは、ユーザー PATHがセミコロンですでに終了しているかどうかをチェックしません。その場合、渡されたディレクトリの追加は、追加のセミコロンなしで行う必要があります。ただし、このコードの最大の問題は、Windowsレジストリに追加する前に適切な情報を表示して文字列を1024文字に切り捨てるために文字列が1024文字より長くなると、ユーザー が破損することです。そのため、渡されたディレクトリを追加する代わりに、既存のユーザーがこのコードによって切り捨てられる(文字化けする)可能性があります。PATHsetx PATH
Mofi

4

必要SETX /M、デフォルトSETXHKEY_CURRENT_USER

SETX /M PATH c:\my-bin-path;%PATH%

これはシステムのPATH変数に影響します...多分私の例は誤解を招きましたが、ユーザーPATH変数を具体的に更新したいと思いました。
Christian Lemer 2013年

@クリスop111.net/82
STTR

1

これはうまくいくようです:

setx PATH "c:\my-user-specifc-bin-path-which-may-contain-spaces;"%%PATH%%

ローカルを使用してユーザーまたはシステムを更新することは絶対に絶対に禁止されていません。このコマンドラインは、Windowsレジストリにユーザーの文字列を追加することにより、ユーザーを本当に破損させます。このコマンドラインを使用するすべてのユーザーがユーザー設定を正常に破損しているため、Windowsの再起動またはログオフ/ログオン後に現在のユーザーアカウントで実行されているすべてのプロセスで使用されているローカルです。 PATH PATH PATH PATHc:\my-user-specifc-bin-path-which-may-contain-spaces;%C:\Windows\System32;C:\Windows;C:\Windows\System32\wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;% PATH PATH
Mofi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.