WindowsのPATH環境変数へのディレクトリの追加


525

WindowsのC:\xampp\phpシステムPATH環境変数に追加しようとしています。

[環境変数]ダイアログボックスを使用して既に追加しています。

しかし、自分のコンソールに入力すると:

C:\>path

新しいC:\xampp\phpディレクトリは表示されません。

PATH=D:\Program Files\Autodesk\Maya2008\bin;C:\Ruby192\bin;C:\WINDOWS\system32;C:\WINDOWS;
C:\WINDOWS\System32\Wbem;C:\PROGRA~1\DISKEE~2\DISKEE~1\;c:\Program Files\Microsoft SQL
Server\90\Tools\binn\;C:\Program Files\QuickTime\QTSystem\;D:\Program Files\TortoiseSVN\bin
;D:\Program Files\Bazaar;C:\Program Files\Android\android-sdk\tools;D:\Program Files\
Microsoft Visual Studio\Common\Tools\WinNT;D:\Program Files\Microsoft Visual Studio\Common
\MSDev98\Bin;D:\Program Files\Microsoft Visual Studio\Common\Tools;D:\Program Files\
Microsoft Visual Studio\VC98\bin

2つの質問があります。

  1. なぜこれが起こったのですか?私が間違ったことはありますか?
  2. また、PATHコンソールを使用して(およびプログラムでバッチファイルを使用して)変数にディレクトリを追加するにはどうすればよいですか?

43
これは、「プログラマが一般的に使用するツール」についての質問なので、話題になっています。Windowsで開発していて、PATHを変更する必要がない場合、私は驚いています。プログラミングに関連したいという欲求を満たすために、投票数の多い回答が指摘したことを強調しました。これは、コンソールから(またはバッチファイルを使用して)プログラムで実行できます。
ジョージストッカー2014年

1
@GeorgeStockerのレビューに感謝します。ええ、プログラムで実行しましたが、コンソールセッションに変更を適用した後で再ログインする必要があるとは思いませんでした。(そして私はそれだけが私の場合だと思います)しかし、最も投票数の多い回答が一般的に質問に答えます
Netorica

1
@George-同意しましたが、現状では、この質問はスタックオーバーフローではなくスーパーユーザー向けに書かれています。スーパーユーザーは、個人で使用するためのWebサーバー構成のヘルプを提供します。Stack Overflowはプログラミングに関する質問です。
jww

1
終了して新しいコンソールを開きます... bashを使用している場合、使用方法や使用方法によっては、変更が持続する前にシステムの再起動が必要になる場合があります。
Tracker1 2016年

回答:


148

これはレジストリを変更するだけです。既存のプロセスはこれらの値を使用しません。それが開始された場合、新しいプロセスは、そうします、この変更その親から古い環境を継承しません。

コンソールセッションの開始方法を指定していません。これを確実にする最良の方法は、コマンドシェルを終了して再度実行することです。次に、更新されたPATHを継承します。


9
うーん、いいえ、本当にレジストリを変更するだけです。たとえば、PATHコマンドを使用したコマンドプロンプトではなく、コントロールパネルのダイアログでこれを行うと、少し明白になるはずです。必要に応じて、SysInternalsのProcess Monitorを使用すると、簡単に何ができるかを確認できます。PATHの使用は同じではありません。コンソールを閉じると、行った変更はすべて失われます。SETXは、ダイアログのように永続的な変更を行う方法です。
ハンスパッサント2014

3
これは正しいです。新しい環境変数を取得する前に、常にコンソールセッションを再起動する必要があります。
BrainSlugs83 2015

1
WM_SETTINGCHANGEアプリケーションからメッセージが送信された場合、コンソールセッションは変数を更新しますか?stackoverflow.com/a/8358361
John_West

理論的には可能ですが、私が知っている実際のCRT実装では実際にこれを行っていません。エクスプローラはそうします。
Hans Passant 2016年


960

オプション1

PATHGUIで変更した後、コンソールウィンドウを閉じて再度開きます。

これは、変更後に開始されたプログラムにのみ新しいが表示されるため機能しPATHます。

オプション2

開いているコマンドウィンドウで次のコマンドを実行します。

set PATH=%PATH%;C:\your\path\here\

このコマンドはC:\your\path\here\、現在のに追加しPATHます。

それを分解する:

  • set現在のcmdセッションでのみ cmdの環境変数を変更するコマンド。他のプログラムやシステムは影響を受けません。
  • PATH=PATH一時的に変更される環境変数であることを示します。
  • %PATH%;C:\your\path\here\- %PATH%部分は、現在の値に展開されPATH、そして;C:\your\path\here\、それに連結されています。これが新品になりPATHます。

16
@Ilya:MyComputer-> Properties-> Advanced-> Env Variables-> Pathでパスが変更された後にコンソールウィンドウを開くことを意味していました。一部のWindowsアプリは、起動後に環境変数の変更を反映しますが、反映しないものもあります。WinXP cmd.exeにはありません。
JimR

7
コンソールを終了して再実行すると、パスをリセットする必要があります。この変更を永続的にする方法はありますか?
David天宇Wong

2
@David天宇Wong「マイコンピュータ」>「プロパティ」>「詳細設定」>「環境変数」>「パス」をたどる場合。そしてその文字列の最後にディレクトリを追加します、それは残ります。変更を行った後は、必ずコンソールを開いてください。
theB3RV 2015

うん、@ theB3RV、それは単純なことをするための長い道のりです。コンソールに入力できる永続的なコマンドがないのは奇妙です
David天宇Wong

12
@David天宇Wong「SETXはダイアログのように永続的な変更を行う方法です。」したがって、SETXコマンドはそれを行う必要があります
theB3RV

202

警告:このソリューション、PATHとシステムの安定性を破壊する可能性があります。副作用として、ユーザーとシステムのPATHがマージされ、PATHが1024文字に切り捨てられます。このコマンドの効果は元に戻せません。最初にPATHのバックアップを作成します。詳細については、コメントを参照してください。

これを盲目的にコピーアンドペーストしないでください。注意して使用してください。

次のコマンドを使用して、パスを永続的に追加できます。PATHsetx

setx /M path "%path%;C:\your\path\here\"

システムではなく/Mユーザーを設定する場合は、フラグを削除します。PATHPATH

ノート:

  • このsetxコマンドは、Windows 7以降でのみ使用できます。
  • 管理者特権のコマンドプロンプトからこのコマンドを実行する必要があります。

  • 現在のセッションでのみ変更する場合は、setを使用します


7
SETX /M path "%path%;C:\Program Files (x86)\Git\bin\"マシンレベルでPATH値を設定するには
Lu55

7
なぜこれは受け入れられた答えではないのですか?私は、ほとんどの人が恒久的に自分のパスを設定したいと思う想像...
ピーター・ゴードン


9
警告%PATH%変数を使用しているため、このコマンドはグローバル環境変数をユーザーの環境変数とマージします。そうじゃない?これは、特に/ Mスイッチと、望ましくない副作用を作成できる
FF_Dev

4
警告2:%PATH%それはプロンプトコマンドの起動時にロードされ、決してその後リロードされるよう変数は(SETXコマンドを実行しても)環境変数と同期していなくてもよいです。また、以前に実行されたスクリプトによってローカルで変更されている可能性もあります。
FF_Dev 2015年

66

setまたはsetxコマンドは必要ありません。ターミナルを開いて次のように入力します。

PATH

これは、PATH変数の現在の値を示します。これにディレクトリを追加しますか?単にタイプ:

PATH %PATH%;C:\xampp\php

何らかの理由でPATH変数をクリアしたい場合(パスがまったくないか、その中のすべてのパスを削除する場合)、次のように入力します。

PATH ;

更新

Danial Wilsonが以下のコメントで述べたように、現在のセッションでのみパスを設定します。パスを永続的に設定するには、使用するsetxが注意が必要です。ただし、パスは永続的に設定されますが、現在のセッションでは設定されないため、変更を確認するには新しいコマンドラインを開始する必要があります。詳細についてはこちらをご覧ください

環境変数が存在するかどうか、またはその値を確認するには、ECHOコマンドを使用します。

echo %YOUR_ENV_VARIABLE%

1
それはうまくいった:)それはどうですか!'パス%PATH%;' 私はそれを覚えていることができます
ダスティン・ウッダード、

12
これはcmdセッションのインスタンスでのみ機能すると思います。setxを使用して永続的に変更します
Daniel Wilson

2
これには引用符を含めないでください。たとえば、PATH %PATH%;C:\Program Files\...代わりにPATH "%PATH%;C:\Program Files\..."
icc97

4
setxは使用しないでください。パス変数が切り捨てられ、設定に費やした他の多くのパスが失われる危険があります。上記の警告に注意してください。
STウィルソン2017年

1
@STWilson、コメントを表示するには遅すぎます!
ウェストヤン(

48

代わりにPowerShellを使用します。

PowerShellを使用してPATHにディレクトリを追加するには、次の手順を実行します。

$PATH = [Environment]::GetEnvironmentVariable("PATH")
$xampp_path = "C:\xampp\php"
[Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path")

マシン全体のすべてのユーザーに変数を設定するには、最後の行は次のようになります。

[Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path", "Machine")

PowerShellスクリプトでは、C:\xampp\phpPATHに追加する前に(存在する場合)の存在を確認することをお勧めします。if条件付きでラップできます。

まとめると、次のようになります。

$PATH = [Environment]::GetEnvironmentVariable("PATH")
$xampp_path = "C:\xampp\php"
if( $PATH -notlike "*"+$xampp_path+"*" ){
    [Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path", "Machine")
}

さらに良いことに、ジェネリック関数を作成できます。追加するディレクトリを指定するだけです。

function AddTo-Path{
param(
    [string]$Dir
)

    if( !(Test-Path $Dir) ){
        Write-warning "Supplied directory was not found!"
        return
    }
    $PATH = [Environment]::GetEnvironmentVariable("PATH")
    if( $PATH -notlike "*"+$Dir+"*" ){
        [Environment]::SetEnvironmentVariable("PATH", "$PATH;$Dir", "Machine")
    }
}

磨くことで物事をより良くすることができます。たとえば、を使用Test-Pathして、ディレクトリが実際に存在することを確認します。


3
パラメータを使用して呼び出すにSetEnvironmentVariableは、Machine管理者権限でPowerShellを開く必要があります
InsOp

この "電源"シェルが%userprofile%も$ userprofileも認識しないのは
非常に残念

3
@abboodあなたが探しているのは$env:userprofileです。
nyuszika7h 2017

3
userまたはmachineの呼び出しでも指定する必要がありますGetEnvironmentVariable。それ以外の場合$PATHは、レジストリのユーザー部分とマシン部分の両方の値が含まれ、パス変数を再度格納するときに不必要にパス変数を爆破します。
ルネNyffenegger

35

より安全なSETX

@Nafscriptの最初のSETX回答に関するすべてのコメントに同意してください

  • SETXデフォルトでは、ユーザーパスが更新されます。
  • SETX ... /Mシステムパスを更新します。
  • %PATH% ユーザーパスが追加されたシステムパスが含まれています

警告

  1. バックアップしますPATH - SETX1024文字以上迷惑を切り捨てます
  2. 呼び出さないSETX %PATH%;xxx -システムパスをユーザーパスに追加します
  3. 呼び出さないSETX %PATH%;xxx /M -ユーザーパスをシステムパスに追加します
  4. バッチファイルを過度に使用すると失明する可能性があります1

ss64のSETXページには、いくつかの非常に良い例があります。重要なことは、レジストリキーがためにどこを指しSETXSETX /M

ユーザー変数:

HKCU\Environment

システム変数:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

使用説明書

ユーザーに追加 PATH

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

システムに追加 PATH

append_system_path.cmd管理者として実行する必要があります。

(基本的には同じですがKeySETX /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と呼ばれる改良バージョンがあります。


1.厳密には当てはまらない


24

パーティーの後半-PATHに追加するディレクトリにすでにいる場合に便利です。

set PATH=%PATH%;%CD%

編集:コメントどおり-標準のWindowsコマンドで機能しますが、Powershellでは機能しません。

powershellの場合、%CD%同等のものは[System.Environment]::CurrentDirectory


1
私のPowershellは%CD%が認識されないと言っています。
Paulo Matos

@PauloMatos使用してみてください[System.Environment]::CurrentDirectory
nclord

4

すべての回答とは別に、Windows環境変数を編集するための素晴らしいGUIツールが必要な場合は、Rapid Environment Editorを使用できます。

それを試してみてください!安全に使用できて素晴らしいです!

http://www.rapidee.com/en/


2
Windows 10では、パス環境変数エディターが大幅に改善されています。それを解決するのに20年しかかかりませんでした。
icc97

4
  • コマンドラインの変更は永続的ではなく、コンソールを閉じると失われます。
  • パスは先着順のように機能します。
  • 既に含まれている他の実行可能ファイルを上書きすることができます。たとえば、パスに別のバージョンが既にあり、パスに永続的な変更を加えずに別のバージョンを追加する場合は、コマンドの先頭にディレクトリを配置する必要があります。

すでに含まれている実行可能ファイルを上書きするには、

PATH = C:\ xampp \ php;%PATH%;を設定します。


2

Windows 10 LTSBで上記の提案を確認し、「ヘルプ」の概要(コマンドで「command /?」と入力すると表示される)を確認すると、PATHコマンドがシステム環境変数を変更するという結論に達しました現在のセッションのパス値のみですが、再起動すると、PATHコマンドを使用する前と同じように、すべての値がデフォルトにリセットされます。

一方、管理者権限でSETXコマンドを使用すると、より強力になり、これらの値が適切に変更されます(または、少なくともこのコマンドが使用されるか、これらの値が手動でGUI操作されるまで...)。

しかし、明確にするために、ここで私のために働いた最良のSETX構文の使用法を共有することが誰かを助けるかもしれないと思った:

SETX PATH "%PATH%;C:\path\to\where\the\command\resides"

等号「=」は避けてください。スペースについては心配しないでください。内部にスペースが含まれているパスには、これ以上引用符を挿入する必要はありません-分割記号 ';' 仕事をします。

SETXに続くPATHキーワードは、システム環境変数の可能な値の間で変更する必要がある値のセットを定義し、引用符内の%PATH%(パーセント記号で囲まれた単語PATH)は、OSに既存のPATHの値をそのままにし、次のパス(分割記号 ';'に続くパス)を既存の値に追加します。

HTH


2

ポイント2については、私が入力している単純なバッチファイルPATHまたは他の環境変数を使用しています。したがって、デフォルトでは環境変数の汚染はありません。このバッチファイルはどこからでもアクセスできるので、次のように入力できます。

c:\>mybatchfile
-- here all env. are available
c:\>php file.php

これは* nix-esとWindowsの重要な違いです。バッチは同じシェルで実行され、環境への変更は(セッションスコープで)終了した後も残ります。ただし、これは両方の方法を削減します。バッチファイルは環境を破壊する可能性があります。(ところで、* nix-es sourceでは、このようなファイルを作成する必要があります. mybatchfile)。
Tomasz Gandor

こんにちは@ grzegorz-gajos、私はまさにそれを探していました、詳細へのリンクは404を与えます。
devkabiir 2018

申し訳ありませんが、リンクのコンテンツはご利用いただけなくなりました。私は削除しました。
Grzegorz Gajos

1

コマンドプロンプトで、前にを付けて、エクスプローラーのコマンドラインを使用するようにCmdに指示しますstart

ですからstart Yourbatchname

名前がであるかのように登録する必要があることに注意してくださいbatchfile.exe

プログラムとドキュメントをレジストリに追加できるので、[スタート-ファイル名を指定して実行]ダイアログボックスまたはショートカットにパスを入力せずに名前を入力すると、Windowsでそれらを見つけることができます。

これは一般的なregファイルです。以下の行を新しいテキストドキュメントにコピーし、anyname.regとして保存します。プログラムやドキュメントで編集してください。

パスでは、\を使用してキーパス内のフォルダー名を区切ります。regeditは単一の\を使用してキー名を区切ります。すべてのregファイルはREGEDIT4で始まります。セミコロンは行をコメントに変えます。@記号は、名前付きの値ではなく、値をキーに割り当てることを意味します。

ファイルは存在する必要はありません。これは、Winword.exeを開くようにWord.exeを設定するために使用できます。

入力start batchfileすると、iexplore.exeが起動します。

REGEDIT4
;The bolded name below is the name of the document or program, <filename>.<file extension> 

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\Batchfile.exe]

;The @ means the path to the file is assigned to the default value for the key.
;The whole path in enclosed in a quotation mark ".

@="\"C:\\Program Files\\Internet Explorer\\iexplore.exe\""

;Optional Parameters. The semicolon means don't process the line. Remove it if you want to put it in the registry

;Informs the shell that the program accepts URLs.

;"useURL"="1"

;Sets the path that a program will use as its' default directory. This is commented out.

;"Path"="C:\\Program Files\\Microsoft Office\\Office\\"

あなたはすでに別の答えで道について話しました。doskey /?cmdマクロも参照してください(これらは入力時にのみ機能します)。

CMDの起動コマンドを実行できます。Windows Recource Kitテクニカルリファレンスより

自動実行

HKCU\Software\Microsoft\Command Processor 

Data type Range Default value 
REG_SZ  list of commands  There is no default value for this entry.  

説明

Cmd.exeを起動するたびに実行されるコマンドが含まれています。


1

コントロールパネルのより良い代替手段は、Pathenatorと呼ばれるsourceforgeからのこのフリーウェアプログラムを使用することです。

https://sourceforge.net/projects/pathenator/

ただし、Windows 7、8、10などのDot.Net 4.0以降を搭載したシステムでのみ機能します。


1

コマンドを実行すると、cmdそのコマンドウィンドウのすべてのシステム変数が更新されます。


ある意味で。現在のセッション内で新しいセッションを開始することが起こります。終了するにはexit、最初に新しいセッションを閉じ、次に最初のセッション(古い環境)を閉じるために、2回呼び出す必要があります。
ファーウェイ

1

gtoolsからパスを使用

それは直感的な方法で物事を行います:例えば:

pathed /REMOVE "c:\my\folder"
pathed /APPEND "c:\my\folder"

それは、新しいコマンドを生成する必要なしに結果示します!


0
  1. その時にPHPをインストールしました。php-7 ***。zipC:\ php \に抽出
  2. 現在のPATH環境変数をバックアップします:run cmd、およびexecuteコマンド:path >C:\path-backup.txt

  3. 現在のパスの値をC:\ path.txtファイルに取得(同じ方法)

  4. path.txtを変更します(パスの長さが1024文字を超えているため、Windowsは数年実行されています)
    • 'C:\ Windows;のように、そこにある重複したパスを削除しましたまたはC:\ Windows \ System32; またはC:\ Windows \ System32 \ Wbem;-私は二度持っています。
    • アンインストールされたプログラムのパスも削除します。例: C:\ Program Files \ NonExistSoftware;
    • このように、私のパス文字列の長さ<1024 :)))
    • パス文字列の最後に; C:\ php \を追加
    • 二重引用符で囲まれたバッファにのみパス値をコピーしてください!例: "C:\ Windows; ****; C:\ php \" PATH =はありません!!!
  5. 管理者としてWindows PowerShellを開きます。
  6. コマンドを実行:

setx path "Here you should insert string from buffer (new path value)"

  1. ターミナルを再実行し(私は "Far manager"を使用しています)、以下を確認します php -v

0

取るに足らないことですが、Windows再起動する必要がありました。この問題に直面したときはする必要がありました。

Windows 7 x64を実行しています。システムのPATH変数を手動で更新しました。これは、statメニューからcmd.exeを実行すると問題なく動作しました。しかし、Windowsエクスプローラーのアドレスバーで「cmd」と入力すると、手動で変更しなかった他の場所からPATHが読み込まれるようです。

(疑いを避けるために-はい、再起動する前にcmdを数回閉じて再実行しましたが、役に立ちませんでした。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.