短い答え:いいえ。
「Javaインスタンスを実行していたのと同じシェルから実行している」と述べた場合、シェルとJavaが共通/共有レベルで共存していることを示唆しているようです。代わりに、それらの関係は階層的です。シェルは親プロセスであり、Java を子プロセスとして開始しました。
プロセス (バッチ プロセスなど) が環境に対して行う変更は次のとおりです。
- そのプロセスから見える、および
- 子プロセスには表示されますが、
- 親プロセスには決して。
バッチ ファイルをコマンド プロンプトから実行すると、現在の環境が即座に変更される理由は、コマンド シェル (cmd.exe) が新しいプロセスを開始せずにバッチ ファイルを「その場で」処理するように設計されているためです [UNIX では、シェルは、ほとんど同じことを行うためにスクリプト ファイルを「ソース」します]。
「cmd.exe」ではないJavaは、これを行いません。お気づきのように、Java からバッチ ファイルを実行すると、新しいコマンド プロセッサが子プロセスとして作成されます。これは、完了時に Java 環境に影響を与えません。
オプションは次のとおりです。
- にバッチファイルを書き込みます
- 他のバッチファイルを呼び出してから
- Java プロセスを開始する、または
- Java プログラムでバッチ ファイルを解析します。「バッチ ファイル」の唯一の有効なコンテンツが「X=Y」形式の単純な代入ステートメントであることを「強制」する場合、これはそれほど難しくありません。実際には、それをProperties ファイルとしてロードすることができます。