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
,则必须将其称为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/