我有一个批处理变量,其中包含另一个变量的名称。当我CALL ECHO
对变量执行 a 时,输出是我所期望的。但是,当我尝试将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”。我知道我可以使用三个变量(myCmdPre、myInnerVar 和 myCmdPost)来做到这一点,而不会延迟变量扩展。但是,似乎应该有另一种(更简洁)的方式来实现我的目标,而不必%myCmdPre%%myInnerVar%%myCmdPost%
每次我想执行 myCmd 时都输入。
编辑
为了澄清,我在同一目录中编写了第二个批处理文件,名为 myCmd.bat,内容如下:
@ECHO %*
当我运行我的示例批处理文件时,生成的输出是:
-flag1 -flag2
好像没有任何东西通过管道传输到 myCmd。