我正在尝试从批处理脚本运行几个 PowerShell 命令,但是“%”符号没有被传输
Posted
技术标签:
【中文标题】我正在尝试从批处理脚本运行几个 PowerShell 命令,但是“%”符号没有被传输【英文标题】:I am trying to run several PowerShell commands from a batch script, however the "%" symbol does not get transferred 【发布时间】:2021-04-03 05:20:47 【问题描述】:我正在尝试从批处理脚本运行多个 PowerShell 命令,但是“%”符号没有传输到 PowerShell。
例如,在命令提示符窗口中编写以下内容:
powershell -Command "& echo 'per%entage'"
将打印:
per%entage
这是我想要的,但是如果我将相同的命令保存到 .bat 或 .cmd 文件中,它会打印:
perentage
为什么忽略“%”符号?有没有办法让它正确传输?我特别困惑它在命令提示符窗口中有效,但在批处理脚本中无效。你会认为两者都可以工作或不工作。
【问题讨论】:
在问这个问题之前你是否进行了基本的搜索,你会知道 % 字符需要在批处理文件中与自身一起转义;所以:%%
而不是 %
【参考方案1】:
非常不幸的是,cmd.exe
的行为在 交互式提示 与 批处理文件 的命令调用方面在 %
字符的方式方面有所不同被解释。
有关背景信息,请参阅this answer。
因此,从批处理文件调用时,%
字符。也就是说逐字解释,必须转义为%%
:
:: From a *batch file*.
powershell -Command "'per%%entage'"
注意:
echo
是 Write-Output
cmdlet 的内置别名,很少需要显式使用 - 请参阅 this answer 了解更多信息。
在使用PowerShell CLI 时,几乎不需要以& ...
的形式调用命令(此处以...
表示) - 只需按原样使用...
。
通常,对于可预测的调用,也值得使用-NoProfile
开关 - before -Command
参数 - 以绕过加载 PowerShell 的配置文件,这些文件主要用于 交互式会话。
【讨论】:
以上是关于我正在尝试从批处理脚本运行几个 PowerShell 命令,但是“%”符号没有被传输的主要内容,如果未能解决你的问题,请参考以下文章