0

順番に実行したいバッチファイルがたくさんあります。そのうちの 1 つは、.xml ファイルにフォルダーを追加する MSI を実行しますPATH。CMD を再起動せずに、後続のバッチ ファイルがこの変更を認識するようにするにはどうすればよいですか? Windows Server 2008 R2 x64 を使用しています。

call新しいプロセスの開始が機能することを期待して、 、cmd /cおよびを試しましstart ""たが、機能しません。

in run-both-scripts.bat
call script1.bat  <-- This runs an MSI which modifies the PATH
call script2.bat  <-- This relies on the PATH changes which were made by the MSI in script1.bat

明確にするために:これは再現するのがかなり簡単です。

  1. CMD を開始
  2. を使用せずに手動で環境変数を作成しsetxて、MSI の動作を模倣します。
    1. [コンピューター] -> [プロパティ] -> [システムの詳細設定] -> [環境変数] -> [新規] を右クリックします。
    2. helloたとえば、値を持つ環境変数を作成しますhi there
  3. CMD ウィンドウで、 と入力しecho %hello%ます。あなたは得るでしょう%hello%
  4. 試してみてくださいcmd /c "echo %hello%。あなたは得るでしょう%hello%
  5. start ""新しい CMD プロセスを開こうとします。タイプecho %hello%。あなたは得るでしょう%hello%
  6. start "" echo %hello%新しい CMD プロセスでコマンドを実行してみてください。あなたは得るでしょう%hello%
  7. 最後に、 [スタート] メニューから手動で新しい CMD ウィンドウを開き、echo %hello%そこから入力してみてください。わかりますhi there

したがって、CMD に環境変数の変更を認識させる唯一の方法は、CMD を再起動することであることがわかります。

4

1 に答える 1

0

わかりました、いくつかの調査を行い、私たちがあなたに投げてきた解決策がうまくいかない理由を見つけました. cmd.exe をアプリケーションとして起動すると、現在の環境変数が参照され、メモリにコピーされます。バッチ ファイルで cmd を開始すると、環境変数は確認されず、代わりに現在のバッチ ファイルに設定されている変数が確認され、それらが使用されます。それは、データをメモリに保存するときの問題です。これを可能にする唯一の方法は、現在の環境変数をハード ディスクのメモリとしてテキスト ファイルにコピーすることです。さて、問題はこれをどうするかです。

綿密な調査の結果、このトピックに関連することがわかったのは の使用だけでしたがstart /i、これをテストしたところ、機能しませんでした。(start /?詳細については)。

つまり、他のsetx、これはバッチでは不可能だと思います。

モナ

于 2013-08-13T22:58:40.387 に答える