Windows 批处理延迟扩展中断运行管道

问题描述 投票:0回答:0

在 .bat 脚本中,我有一个包含

&
的变量,需要传递给多个命令,其中一个是管道。 不起作用的概念代码:

set foo="1 & 2"
command1 --foo %foo% --bar
echo %foo% | command2 --stdin

在尝试herehere的各种解决方案之后,我最终引用了变量的值(而不是转义而不引用,或者引用整个“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 中运行它)

windows batch-file cmd
© www.soinside.com 2019 - 2024. All rights reserved.