bat から exe を使用した後、バッチ ファイルが正しい値を返さない

bat から exe を使用した後、バッチ ファイルが正しい値を返さない

このスクリプトには多くの問題があります。このスクリプトは、(ユーザーが指定した) ファイルを読み取って、それをstoreresult環境変数に保存することになっています。

storvar私はバッチ コマンドに影響を与えない BAT から EXE へのコンバータを使用しているので、それは問題ではありません。(なぜではなくを呼び出しているのか疑問に思っている方のためにstorvar.bat)

メインスクリプト(storvar.exe):

set a=%~1
set b=%~2
set c=%~3
for /f "delims=" %%a in (stor\%a%.stor) do set storeresult=%%a
pause

スクリプトを呼び出すために使用しているスクリプト (呼び出し時にエラーは発生しません):

storevar Hi hi
pause
echo %storeresult%
pause

呼び出すと、結果 ( %storeresult%) が何も返されないので、問題が見つかりません。

答え1

変数を定義して使用するときは、常にその変数の範囲

コマンドを使用して定義した環境変数は、set定義されたプロセスの範囲内でのみ有効です。これは実験で簡単に証明できます。

  1. コマンド プロンプトを 1 つ開き、 を定義してみますset a = bsetを使用して、正しく定義されていることを確認します。
  2. ここで、2 番目のコマンド プロンプトを開き、 を呼び出します。 はこのスコープでは定義されていないsetことがわかります。a

storvar.exeは別のプロセスです。したがって、独自のスコープを持ちます。その中で定義した環境変数はそのまま残り、終了時に削除されます。

それで、代替案はあるのでしょうか?ええ、そうです。私自身は、廃止されたバッチ ファイルの代わりに PowerShell を使用しています。PowerShell はファイルから内容を抽出し、それをすぐに使用することも、次のスクリプトに出力することもできます。(Microsoft は PowerShell を EXE にコンパイルすることを公式にサポートしていますが、初心者向けのものも TechNet Gallery で見つけることができます。) AutoIt も別の選択肢です。

関連情報