在 .bat 脚本中,我有一个包含
&
的变量,需要传递给多个命令,其中一个是管道。
不起作用的概念代码:
set foo="1 & 2"
command1 --foo %foo% --bar
echo %foo% | command2 --stdin
在尝试here和here的各种解决方案之后,我最终引用了变量的值(而不是转义而不引用,或者引用整个“var=value”)。 这在将参数传递给命令时有效,但在管道中使用 echo 时失败(因为引号也被打印出来)。
接下来,我添加了延迟扩展以删除引号,但现在管道在回显中变成了文字字符:
setlocal enableExtensions enableDelayedExpansion
set foo="1 & 2"
echo %foo%
echo %foo% | sort
echo !foo:"=!
echo !foo:"=! | sort
输出:
"1 & 2"
"1 & 2"
1 & 2
1 & 2 | sort
我如何说服最后一个命令实际运行管道而不是它成为 echo 参数的一部分?
(以防万一,我在 Windows 10 中运行它)