This question和 this blog post解决如何将特定参数从批处理文件传递到 PowerShell 脚本。
如何将所有参数传递到 PowerShell 脚本中?基本上我想拼写所有参数,以便批处理文件透明地传递所有参数。
编辑以获得更多上下文:
我目前正在使用这样的一行:
PowerShell.exe -Command "& '%~dpn0.ps1' '%1' '%2'"
这可行,但会在文件之间产生冗余,因此,如果我更新 PowerShell 脚本以采用不同的参数,我也必须更新批处理脚本。如果我能做类似的事情就好了:
PowerShell.exe -Command "& '%~dpn0.ps1' '%*'"
最佳答案
尝试以下操作:
powershell -File "%~dpn0.ps1" %*
在批处理文件中,
%*
表示传递的所有参数。[1]-File
是用于通过 PowerShell 的 CLI 调用脚本的参数。- 然后所有剩余的参数将按原样传递(而
-Command
将使它们接受 PowerShell 的另一轮解释[2]晚饭> ).
[1] 请注意,要让 cmd.exe
(批处理文件)将带有嵌入空格的参数识别为单个参数,您必须将其包含在 "... "
。
例如,如果您想将参数 a
和 b c
传递给批处理文件 file.cmd
,您必须将其命名为
文件 a "b c"
。
要传递嵌入 "
实例,\
-转义它们;例如,"\"b c\""
使 PowerShell参见 "b c"
,包括双引号。
如果您遵守这些规则,%*
- 不加引号 - 会正确地传递参数数组。
不要使用"%*"
- 它不会按预期工作。
[2] 实际上,-Command
导致所有后续参数均由一个空格连接,然后解释结果字符串 作为 PowerShell 命令 - 也就是说,在按照 cmd.exe
(批处理文件)的规则解析参数之后,它们将受到另一轮通过 PowerShell 进行解析。
不幸的是,PowerShell 一直以这种方式工作,但行为是模糊的,而且很可能在 Unix 世界中引起更多的困惑,现在 PowerShell 已经跨平台 - 参见 this GitHub issue .
关于windows - 使用所有参数从批处理文件调用 PowerShell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46163975/