別の変数の名前を含むバッチ変数があります。変数に対して a を実行するCALL ECHO
と、期待どおりの出力が得られます。ただし、CALL ECHO
コマンドの出力を引数として別のコマンドにパイプしようとすると、問題が発生します。これは私が試みているものです:
@SET myCmd=myCmd -flag1 -flag2
@SET myInnerVar=Bar
@SET myCmdArg="Value of myInnerVar is %%myInnerVar%% for this call"
:: The following correctly prints "Value of myInnerVar is Bar for this call"
@CALL ECHO %myCmdArg%
:: The following runs without passing the output as an argument to myCmd
@CALL ECHO %myCmdArg%| %myCmd%
引数を使用して直接呼び出されたかのように、遅延変数展開を使用して myCmd を呼び出す方法を知っている人はいますか?
@myCmd -flag1 -flag2 "Value of myInnerVar is Bar for this call"
これを実行しようとしている理由は、myCmd を複数回呼び出す必要があるためです。変更されるのは文字列 "Bar" だけです。これは、3 つの変数 (myCmdPre、myInnerVar、および myCmdPost) を使用して、変数の展開を遅らせることなく実行できることを知っています。%myCmdPre%%myInnerVar%%myCmdPost%
ただし、 myCmd を実行するたびに入力する必要なく、目標を達成する別の (より簡潔な) 方法が必要なようです。
編集
明確にするために、myCmd.bat という同じディレクトリに次の内容の 2 つ目のバッチ ファイルを作成しました。
@ECHO %*
サンプル バッチ ファイルを実行すると、次のような出力が生成されます。
-flag1 -flag2
myCmd には何もパイプされていないかのようです。