PATH環境変数に含まれていないプログラムを実行できるのはなぜですか?


9

なぜコマンドjava -versionグローバルにアクセスできるのか疑問に思っていましたか?

私はそれを任意のディレクトリから実行でき、その動作します:

ここに画像の説明を入力してください

それはどのように機能しますか?

これは私のシステムPATH変数は次のようになります。

C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;
%SystemRoot%\system32;
%SystemRoot%;
%SystemRoot%\System32\Wbem;
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\

私についてjava.exeは、%programfiles%\java\jre7\bin


2
こちらをご覧ください
Daniel Beck

現時点では詳細はわかりません。そのため、これはコメントであり、回答ではありませんが、java.exe(またはjava.comなど)があなたの中にない場合、PATH実行可能パスを指定できる別のレジストリエントリがあります。
Mark Hurd

1
@MarkHurd cmd(およびCreateProcess)は、App Pathsレジストリエントリを調べません。ShellExecute(したがって[実行]ダイアログ)のみを調べます。
Random832

@MarkHurd、あなたが予想したように、それは私のパス変数にありません ..
Pacerier

1
@Pacerier java実行可能ファイルは%SystemRoot%\ System32 \にあります
Dwayne Hinterlang

回答:


13

通常、繰り返し使用される実行可能ファイルがWindowsによって検出されるディレクトリのグループがありますが、実際には、コマンドをグローバルとして使用するかどうかにかかわらず、特定の理由はありません。開発者はこれを「グローバル」として、どこにでも好きな場所に含めることができました。コマンドを「グローバル」として使用する場合は、コマンドを「Windows環境変数」として追加する必要があります。これを行うには、次の方法を使用できます。

  1. 「Windowsシステムプロパティ」を使用して手動で追加する: ここに画像の説明を入力してください

  2. アドオンツールSetx.exeの使用:

これは標準のWindows XPセットアップの一部ではありませんが、setx.exeと呼ばれるコマンドラインツールがWindows XP Service Pack 2サポートツールに含まれています。このツールは、setコマンドを拡張して、環境変数を永続的に変更できるようにします。たとえば、フォルダーC:\ New Folderをパスに追加するには、コマンドは次のようになります。

setx path "%PATH%;C:\New Folder" 
  1. 環境変数をリストするためのスクリプト:

コマンドプロンプトで "Set"コマンドを使用すると、テキストファイルへのリダイレクトと共に現在の環境変数のリストを作成できます。コマンドは

set > C:\env_list.txt 

ファイル名「C:\ env_list.txt」は、任意の名前に置き換えることができます。

Microsoftには、このページに環境変数をリストするVBScriptもあります

  1. 環境変数のレジストリキー:

レジストリの編集に慣れている方のために、環境変数を変更する別の方法があります。ユーザー環境変数は、レジストリのキーに格納されます。

HKEY_CURRENT_USER\Environment

システム変数はキーにあります:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

展開する必要がある形式の環境変数(%PATH%など)は、REG_EXPAND_SZレジストリ値としてレジストリに保存する必要があることに注意してください。レジストリの編集は、主にシステム管理者が使用するスクリプト用であり、平均的なPCユーザーにはお勧めできません。

詳細については、こちらをご覧ください。


1
ただし、java.exeはにあり%programfiles%\java\jre7\binます。このフォルダには、私のシステムのPath変数には表示されません...
Pacerier

7
Java.exeは%SystemRoot%\ System32 \にもあります。これは、PATH変数に表示されます
Dwayne Hinterlang

5

「グローバルコマンド」は、環境変数によって決まります。

どのOSを使用しているかによって、設定方法はかなり異なります。

最も一般的な方法は

[マイコンピュータ]を右クリックして[プロパティ]を選択します

Windows7では、左側のペインで[システムの詳細設定]を選択する必要があります。

[システムのプロパティ]ダイアログを開いたら、[詳細]タブを選択します。

下部にボタン「環境変数」があります

環境変数ダイアログでは、ユーザーごとまたはシステム全体の環境変数を設定できます。

たとえば、簡略化されたシステム変数「パス」は次のようになります...

C:\ Program Files \ Java \ jre6 \ bin ; C:\ Ruby19 \ bin;

これらのパスにある実行可能ファイルは、コマンドラインから直接呼び出すことができます。

実行ダイアログからcalc、mspaint、cmdをすべて呼び出すことができるのは、C:\ windows \ system32がPath環境変数にあるためです。

環境変数にカスタムパスを追加できます。既存のパスを上書きせず、セミコロンを使用してパスを区切るように注意してください。「;」

その後、java -versionコマンドのようにパス全体を入力せずに、そのパスから実行可能ファイルをコマンドラインで直接実行できます。

詳細については、次のリンクを参照してください...

環境変数

環境変数の理解と構成

新規インストールでのJava.exe検索


3

以下whichは、現在のPATHEXT拡張機能のPATH内のすべてのコマンドヒットを表示するシンプルなコードです。

@for %%I in ("%path:;=\" "%") do @for %%E in (%pathext:;= %) do @if exist "%%~dpI%1%%E" @echo %%~dpI%1%%E

それを入れてwhere.cmdwhichもしそれを手に入れたらどこかから来ることを許可します!)、それをで呼び出しますwhere java

さて、上記の私のコメントで、私はあればあることを示唆しjavaないではない、あなたに表示されPATH、あなたがチェックすることができHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths 、[参照]が、実際にこれを試した後、それが唯一のもの、その使用とコマンドラインでの仕事、ないShellExecuteExような、スタートファイル名を指定して実行およびstartCLIコマンド。


2

コマンドを入力すると、シェルはPATH(%PATH%、OSによっては$ PATH)という名前の環境変数を調べます。PATH上のすべてのディレクトリを照会して、入力したコマンドと一致する実行可能ファイルが見つかるかどうかを確認します。最初に見つかったものが実行されます。

PATH変数を設定するさまざまな方法については、他の回答を参照してください。

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