4

別の環境変数/バッチファイル関連の問題の解決策を追求しているときに、以前に訪れた問題に再び遭遇しました(しかし、私の人生では、どのように解決したか、または解決したかどうかさえ思い出せません

2 つの BAT ファイル (または 1 つのバッチ ファイルとコマンド ライン) があるとします。変数を読み取ることができるように、環境変数名を他の人に渡すにはどうすればよいですか? 次の例は機能しません。

A.BAT:
  @call b.bat path

B.BAT:
  @echo %%1%

> A.BAT
> %1
> B.BAT path
> %1

環境変数名を渡すのは簡単ですが、呼び出し先はそれを使用できないようです。(前回この問題が発生したときにこれに対処したかどうか、またはどのように対処したかは覚えていませんが、一時的な BAT ファイルをリダイレクトしてそれらを呼び出すなど、理想的とは言えない使用方法が必要だったのではないかと思います。)

何か案は?ありがとう。

4

2 に答える 2

4

残念ながらどこにも文書化されていない小さなトリックを使用することができます:

call echo %%%1%%

次に、遅延拡張を使用できます。

setlocal enabledelayedexpansion
echo !%1!

遅延展開は、変数に他の区切り文字を使用し、コマンドを実行する直前にそれらを評価するため、ここで役立ちますが、通常、評価は通常のパラメーター展開と衝突する可能性があります。

これをやりすぎる別の方法は、サブルーチンです。

call :meh "echo %%%1%%"

...

:meh
%~1
goto :eof

他の答えを含むすべての例には、ここで共通することが1つあります。それらはすべてcmd、変数/パラメーターを2回評価することを強制します。最初の評価はを生成する必要があるため、それ以外の場合は機能しませんが%VariableName%、2番目の評価はそれを変数の内容に拡張します。

コードは私のSVNにもあります。

于 2010-04-18T08:58:21.313 に答える
2

B.BAT:

FOR /F "delims=" %%a IN ('echo.%%%1%%') DO set inputvar=%%a
echo %inputvar%

それはそれを行う1つの方法です。

やりたいことがエコーするだけの場合は、次のことができます:echo.%%%1%%|moreまたはecho %%%1%%|find /v ""

于 2010-04-12T22:11:37.643 に答える