使用所有参数从batch file中调用PowerShell脚本

这个问题和这个博客文章解决了如何将特定参数从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问题 。