这个问题和这个博客文章解决了如何将特定参数从batch file传递到PowerShell脚本。
如何将所有parameter passing到PowerShell脚本? 基本上我想要所有的参数,以便batch file透明通过所有参数。
编辑更多的上下文:
我目前正在使用如下一行:
PowerShell.exe -Command "& '%~dpn0.ps1' '%1' '%2'"
这是有效的,但在文件之间创build一个冗余,如果我更新PowerShell脚本以采取不同的参数,我也必须更新批处理脚本。 如果我能做到这样的话,那将是一件好事。
PowerShell.exe -Command "& '%~dpn0.ps1' '%*'"
尝试以下操作:
powershell -File "%~dpn0.ps1" %*
在批处理文件中, %*
表示传递的所有参数。 [1]
-File
是用来通过PowerShell的CLI调用脚本的参数。
-Command
将使它们由PowerShell [2]进行另一轮解释)。 [1]请注意,对于cmd.exe
(批处理文件)将嵌入空白的参数识别为单个参数,必须将其放在"..."
。
例如,如果你想传递参数a
和b到批处理文件file.cmd
,你必须把它称为
file a "bc"
。
要传递嵌入的 "
实例"
,请使用"\"bc\""
隐藏它们;例如, "\"bc\""
会使PowerShell看到"bc"
,包括双引号。
如果遵守这些规则, %*
– 不加引用 – 正确地传递参数数组。
不要使用"%*"
– 它不会按预期工作。
实际上, -Command
使得所有后面的参数都被一个单独的空格连接起来,并且结果字符串被解释为一个PowerShell命令 – 也就是说,在参数被cmd.exe
的规则解析之后(批处理文件),他们受到PowerShell的另一轮解析。
不幸的是,PowerShell一直以这种方式工作,但是这种行为是模糊的,并且可能会导致Unix世界更混乱,现在PowerShell已经跨平台了 – 请参阅这个GitHub问题 。