我正在尝试 运行 来自批处理脚本的几个 PowerShell 命令,但是“%”符号没有被传输

I am trying to run several PowerShell commands from a batch script, however the "%" symbol does not get transferred

我正在尝试 运行 从批处理脚本执行多个 PowerShell 命令,但是“%”符号没有传输到 PowerShell。

例如,在命令提示符中写入以下内容window:

powershell -Command "& {echo 'per%entage'}"

将打印:

per%entage

这是我想要的,但是如果我将相同的命令保存到 .bat 或 .cmd 文件中,它会打印:

perentage

为什么忽略“%”符号?有没有办法让它正确传输?我特别困惑的是它在命令提示符 window 中工作,但在批处理脚本中不起作用。你会认为两者要么有效要么无效。

非常遗憾,cmd.exe 的行为与来自 交互式提示 来自批处理文件 [=49] 的命令调用不同=] 关于如何解释 % 个字符。

有关背景信息,请参阅

因此,当从批处理文件调用时,一个%字符。即要逐字解释 ,必须转义为 %%:

:: From a *batch file*.
powershell -Command "'per%%entage'"

注:

  • echoWrite-Output cmdlet, whose explicit use is rarely needed - see this answer 的内置别名以获取更多信息。

  • 在使用 PowerShell CLI 时几乎不需要以 & { ... } 形式调用命令(此处符号为 ...)- 只需使用 ... 原样。

  • 通常,对于可预测的调用,也值得使用 -NoProfile 开关 - -Command 参数之前 - 因此绕过 PowerShell 配置文件的加载,这些文件主要用于 interactive 会话。