
このスクリプトには多くの問題があります。このスクリプトは、(ユーザーが指定した) ファイルを読み取って、それを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 つ開き、 を定義してみます
set a = b
。set
を使用して、正しく定義されていることを確認します。 - ここで、2 番目のコマンド プロンプトを開き、 を呼び出します。 はこのスコープでは定義されていない
set
ことがわかります。a
storvar.exe
は別のプロセスです。したがって、独自のスコープを持ちます。その中で定義した環境変数はそのまま残り、終了時に削除されます。
それで、代替案はあるのでしょうか?ええ、そうです。私自身は、廃止されたバッチ ファイルの代わりに PowerShell を使用しています。PowerShell はファイルから内容を抽出し、それをすぐに使用することも、次のスクリプトに出力することもできます。(Microsoft は PowerShell を EXE にコンパイルすることを公式にサポートしていますが、初心者向けのものも TechNet Gallery で見つけることができます。) AutoIt も別の選択肢です。