1

(新しいコンソール インスタンスではなく) Java インスタンスを実行していたのと同じシェルから実行されているかのように、Windows でバッチ ファイルを実行することは可能ですか?

実行したいバッチ ファイルがあります。これはサード パーティによって提供され、条件付きで一連の環境変数を設定します。Java に変換する必要はなく、Java アプリの特定の機能を動作させるために必要です .

代わりに、Jar を実行する前にコマンド プロンプトでバッチ ファイルを手動で実行して同じ効果を得ることを知っていますが、このシナリオでは、大量の入力または大量のカスタマイズされたバッチ ファイルが必要になります。

4

1 に答える 1

3

短い答え:いいえ。

「Javaインスタンスを実行していたのと同じシェルから実行している」と述べた場合、シェルとJavaが共通/共有レベルで共存していることを示唆しているようです。代わりに、それらの関係は階層的です。シェルは親プロセスであり、Java を子プロセスとして開始しました。

プロセス (バッチ プロセスなど) が環境に対して行う変更は次のとおりです。

  • そのプロセスから見える、および
  • 子プロセスには表示されますが、
  • 親プロセスには決して。

バッチ ファイルをコマンド プロンプトから実行すると、現在の環境が即座に変更される理由は、コマンド シェル (cmd.exe) が新しいプロセスを開始せずにバッチ ファイルを「その場で」処理するように設計されているためです [UNIX では、シェルは、ほとんど同じことを行うためにスクリプト ファイルを「ソース」します]。

「cmd.exe」ではないJavaは、これを行いません。お気づきのように、Java からバッチ ファイルを実行すると、新しいコマンド プロセッサが子プロセスとして作成されます。これは、完了時に Java 環境に影響を与えません。

オプションは次のとおりです。

  1. にバッチファイルを書き込みます
    • 他のバッチファイルを呼び出してから
    • Java プロセスを開始する、または
  2. Java プログラムでバッチ ファイルを解析します。「バッチ ファイル」の唯一の有効なコンテンツが「X=Y」形式の単純な代入ステートメントであることを「強制」する場合、これはそれほど難しくありません。実際には、それをProperties ファイルとしてロードすることができます。
于 2013-01-08T08:01:18.390 に答える