質問: 下記のコマンド結果にありますように、JAVA_HOMEは環境変数として正しく設定されており、binへのPATHも正しく設定されていますが、`javac-version` と入力すると例のエラーメッセージが表示されます。 Windowsの再起動、Java 14の再インストールと色々試しましたが上手くいかず、程々困っております。宜しくご教授願います。 ``` Microsoft Windows [Version 10.0.18362.720] (c) 2019 Microsoft Corporation. All rights reserved. C:\>set JAVA_HOME JAVA_HOME=C:\Program Files\Java\jdk-14 C:\>Path PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Java\jdk-14\bin;C:\Users\室谷一蔵\AppData\Local\Microsoft\WindowsApps; C:\>javac-version 'javac-version' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 ```
回答: `javac`と`-version`の間に半角スペースが入っていないのでエラーが発生しています。 半角スペースを入れて実行してください。 `javac`とはJava用のソースコード(.javaファイル)を機械が読みやすい中間言語(.classファイル)に変換するコンパイラです。 後述の通り`-version`はスペース区切りで渡すコマンドライン引数です。 `javac-version`というコマンドは存在しないのでエラーが発生します。 コマンドラインで入力する`javac`と`javac.exe`と`"C:\Program Files\Java\jdk-14\bin\javac.exe"`は同一の意味です。 コマンドプロンプト上で`javac`と入力した時に、コマンドプロンプトは環境変数`PATH`を先頭から順に調べて`javac(.exe)`を探していきます。 (正確にはカレントディレクトリを調べたり.batも対象に含んだりと、もっと複雑なのですが割愛します) `javac`と入力して見つかった`javac.exe`は、スペースで区切られたコマンドライン引数を読み取ることで処理を決定します。 `*.java`ファイルを引数に渡せばそのファイルをコンパイルしますし、`-version`オプションを渡せばバージョン情報を返します。 上記の一連の流れがbinへの`PATH`を設定して、`javac -version`と入力した時の内部的な処理になります。 最初はスペースを挿入してもうまくいかなかったのはおそらく下記のいずれかが理由と予想されます。 * コマンドプロンプトを立ち上げた後にシステムの詳細設定から`PATH`を設定したためコマンドプロンプトが変更後の`PATH`を読み取れていなかった →コマンドプロンプトを閉じて開きなおしたら最新の`PATH`を読み込むので正しく動く * スペースが全角スペースになっていた * コマンド自体をタイプミスしていた