Windows 10 の cmd で環境変数 (特に PATH) を設定し、cd を使用する際の問題

Windows 10 の cmd で環境変数 (特に PATH) を設定し、cd を使用する際の問題

私はフォローしていますチュートリアルApache Storm をセットアップします。(これは単なるコンテキストであり、私のエラーにはあまり関係ありません。)

%JAVA_HOME%つまり、いくつかの環境変数、具体的にはとをそれぞれと%STORM_HOME%として設定するように指示されます。私はこれまでこのようなことはしたことがなかったので、その方法を調べて、次のように実行しました。C:\Java\jdk1.8.0_60\C:\storm-0.9.1-incubating-SNAPSHOT-12182013\

C:\>setx %JAVA_HOME% C:\JAVA\jdk1.8.0_60\

そしてそれは与えた:SUCCESS: Specified value was saved.

それから私はこうしました:

C:\>setx %STORM_HOME% C:\storm-0.9.1-incubating-SNAPSHOT-12182013\

そして同じ結果が返されました:SUCCESS: Specified value was saved.

次に、チュートリアルでは を追加するように指示されています%STORM_HOME%\bin;%JAVA_HOME%\bin;C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\;。現在の値を確認するためにPATH入力すると、次の結果が返されました。C:\>PATH

PATH=C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\

そこで私は、

C:\>setx PATH C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;%STORM_HOME%\bin;%JAVA_HOME%\bin;C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\; 

言い換えると、私はただ呼び出しsetxPATH、現在の設定に、チュートリアルに書かれている内容を最後に追加して設定してみました。しかしSUCCESS: Specified value was saved.、次のように入力すると、

C:\>PATH

元の状態が返されます(追加しようとしたものはそこにありません)。別の方法を試しました。

C:\>PATH=%PATH%;%STORM_HOME%\bin;%JAVA_HOME%\bin;C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\;

次に入力すると、C:\>PATH追加したい内容が追加された完全な PATH が返されました。

私が今直面している問題は、これらの変数の使用です。

C:\>cd %STORM_HOME%

The system cannot find the path specified.コンピュータを再起動しようとしましたが、リセットPATHされても同じエラーが発生します。

答え1

@DavidPostill は正しいですが、実際には問題は解決されません。実際の答えはもっと簡単です。コマンド プロンプトは、他のプログラムと同様に、起動時に環境変数を受け取ります。永続的な環境変数 (ユーザーごとまたはシステム全体) を設定すると、将来のプロセスの環境変数を決定するレジストリ値が変更されます。実際には環境変数を変更していないので、現在まったく処理しません!

SETX ヘルプドキュメント ( setx /?) より:

 2) On a local system, variables created or modified by this tool
    will be available in future command windows but not in the
    current CMD.exe command window.

これに対処するには 2 つの方法があります。 ドキュメントに記載されているように、簡単な方法は CMD の新しいインスタンスを開始することです。 これは簡単ですが、コマンド履歴などがなくなります。 より複雑な方法は、ローカル環境変数を設定することです ( コマンドを使用set)。 これを行う最善の方法は、実際にset最初に を使用し、次にsetx現在の環境変数を使用して呼び出すことです。 上記の操作の例を次に示します。

REM Set the local version of JAVA_HOME
set JAVA_HOME=C:\JAVA\jdk1.8.0_60\
REM Set the local version of STORM_HOME
set STORM_HOME=C:\storm-0.9.1-incubating-SNAPSHOT-12182013\
REM Append the new values to PATH
set PATH=%PATH%;%STORM_HOME%\bin;%JAVA_HOME%\bin;C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\;
REM Do whatever checks you want to do to confirm that those are set correctly
cd %STORM_HOME%
REM Now, save the current (local) values of the environment variables
REM to persistent storage (registry)
setx JAVA_HOME %JAVA_HOME%
setx STORM_HOME %STORM_HOME%
setx PATH %PATH%

文字の使用に注意してください%。文字は環境変数を参照するときにではなく、環境変数を展開するときに使用します。setx上記の行は、「ユーザー全体の環境変数 JAVA_HOME をこのプロセスの現在のローカル値 JAVA_HOME に設定する」として処理されます。これは、「永続的な環境変数 JAVA_HOME を に設定する」と同等ですC:\JAVA\jdk1.8.0_60\。これは、現在のプロセスで %JAVA_HOME% が展開される値だからです。

答え2

SETXがPATHを更新しなかったのはなぜですか

setx PATH C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;%STORM_HOME%\bin;%JAVA_HOME%\bin;C:\Python27;C:\Python27\Lib\site-packages\;C:\Python27\Scripts\;

構文がsetx間違っています:

  • 2 番目のパラメータ"(「値」) を引用符で囲みます。

    2 番目のパラメータにスペースが含まれている場合、引用符で囲む必要があります%PATH%。ほとんどの場合、スペースが含まれています。

以下を使用する必要があります:

setx PATH "%PATH%;%STORM_HOME%\bin;%JAVA_HOME%\bin"

または:

setx PATH "%STORM_HOME%\bin;%JAVA_HOME%\bin;%PATH%"

構文

SETX [/s Computer [Credentials]] Variable Value [/m]

SETX [/s Computer [Credentials]] [Variable] /k RegistryPath [/m]

SETX [/s Computer [Credentials]] /f FileName {[Variable] {/a L,T | /r oL,oT "SearchString"} [/m] | /x} [/d Delimiters]

ソースセットx


参考文献

  • Windows CMD コマンドラインの AZ インデックス- Windows コマンド ラインに関連するあらゆることに関する優れたリファレンス。
  • セットx- 環境変数を永続的に設定します。SETX を使用して、マシン (HKLM) または現在ログオンしているユーザー (HKCU) の環境変数を設定できます。

関連情報