This question和this blog post解决了如何将特定参数从批处理文件传递到PowerShell脚本。
如何将所有参数传递到PowerShell脚本?基本上我想要展开所有参数,以便批处理文件透明地传递所有参数。
修改以获取更多背景信息:
我目前正在使用如下行:
PowerShell.exe -Command "& '%~dpn0.ps1' '%1' '%2'"
这样可行,但会在文件之间创建冗余,这样,如果我更新PowerShell脚本以获取不同的参数,我也必须更新批处理脚本。如果我可以做类似的事情,那会更好:
PowerShell.exe -Command "& '%~dpn0.ps1' '%*'"
答案 0 :(得分:6)
尝试以下方法:
powershell -File "%~dpn0.ps1" %*
在批处理文件中,%*
表示传递的所有参数。 [1]
-File
是用于通过PowerShell CLI调用脚本的参数。
-Command
将使他们受到PowerShell [2] 的另一轮解释
)。 [1]请注意,对于cmd.exe
(批处理文件)来识别嵌入空格作为单个参数的参数,必须将其括在"..."
中。
例如,如果您想将参数a
和b c
传递给批处理文件file.cmd
,则必须将其称为
file a "b c"
。
要传递嵌入式 "
个实例,\
- 逃避它们;例如,"\"b c\""
使PowerShell看到"b c"
,包括双引号
如果您遵守这些规则,%*
- 不引用 - 正确传递参数数组。
不使用"%*"
- 它将无法按预期工作。
[2]实际上,-Command
会导致所有后续参数都被一个空格连接,然后结果字符串被解释为作为PowerShell命令 - 也就是说,在cmd.exe
(批处理文件)的规则解析参数之后,它们受到PowerShell的另一轮解析。
不幸的是,PowerShell一直以这种方式工作,但是这种行为很模糊,并且可能会导致Unix世界更加混乱,现在PowerShell已经跨平台了 - 请参阅this GitHub issue。