This questionthis 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(批处理文件)将带有嵌入式空格的参数识别为单个参数,您必须将其括在"..."中。
    例如,如果您要将参数ab c传递给批处理文件file.cmd,则必须将其称为file a "b c"
    要传递嵌入式"实例,请\ -escape实例;例如"\"b c\""使PowerShell看到"b c",包括双引号。
    如果您遵守这些规则,%*-不带引号-正确地传递参数数组。
    不要使用"%*"-无法正常使用。

    [2]实际上,-Command会导致以下所有参数均由一个空格连接,然后将所得字符串解释为PowerShell命令-也就是说,在根据cmd.exe(批处理文件)的规则解析了参数之后,它们将由PowerShell进行另一轮解析。
    不幸的是,PowerShell已经跨平台运行了,但是PowerShell一直以这种方式工作,但是这种行为是晦涩的,并且有可能在Unix世界中引起更多的困惑-请参见this GitHub issue

    关于windows - 使用所有参数从批处理文件调用PowerShell脚本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46163975/

    10-09 22:45
    查看更多