我正在尝试从批处理脚本运行几个 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'"

注意:

echoWrite-Output cmdlet 的内置别名,很少需要显式使用 - 请参阅 this answer 了解更多信息。

在使用PowerShell CLI 时,几乎不需要以& ... 的形式调用命令(此处以... 表示) - 只需按原样使用...

通常,对于可预测的调用,也值得使用-NoProfile 开关 - before -Command 参数 - 以绕过加载 PowerShell 的配置文件,这些文件主要用于 交互式会话。

【讨论】:

以上是关于我正在尝试从批处理脚本运行几个 PowerShell 命令,但是“%”符号没有被传输的主要内容,如果未能解决你的问题,请参考以下文章

Jmeter 从文件运行 SQL 脚本

如何从 python 脚本在新窗口上打开批处理

从批处理文件运行 Powershell 脚本中的参数

快速完成处理程序

从带有参数的python脚本执行python文件jenkins]

从批处理文件运行多处理arcpy python