如何从Powershell将参数传递给批处理文件

时间:2017-04-27 13:09:32

标签: powershell batch-file parameters

我尝试了以下的多次迭代,但没有任何效果。 .bat文件需要接受2个参数。 $IN$TIC是首字母和票号。

变量:

$IN = $textboxInitials.Text
$TIC = $textboxTicket.Text

命令(这些都不起作用):

start "\\Path\InstallOffice.bat" $IN $TIC
start "\\Path\InstallOffice.bat $IN $TIC"
start "\\Path\InstallOffice.bat" KL 562355
cmd.exe /C "\\Path\InstallOffice.bat" KL 562355
& "\\Path\InstallOffice.bat" $IN $TIC

这确实有效,但没有参数。

start "\\Path\InstallOffice.bat"

我正在编写一个程序,在我们的标准构建过程之后安装一堆程序,以便帮助台可以选择安装的需求。这只是第一个要运行的命令,也会有一堆命令,所以powershell需要等待.bat文件完成才能继续执行下一个命令。

2 个答案:

答案 0 :(得分:2)

使用这个小型演示批处理EchoArgs.cmd:

$IN = 'KL'
$TIC = '562355'
$Bat = ".\EchoArgs.cmd"

Clear
"--Variant 1"
start -wait -NoNewWindow $Bat -args "$IN $TIC"
"--Variant 2"
start -wait  -NoNewWindow $bat "$IN $TIC"
"--Variant 3"
start -wait  -NoNewWindow $Bat "KL 562355"
"--Variant 4"
cmd.exe /C $Bat KL 562355
"--Variant 5"
& $Bat $IN $TIC

这5个命令的略微修改版本:

--Variant 1
Args=KL 562355
Arg1=KL
Arg2=562355
--Variant 2
Args=KL 562355
Arg1=KL
Arg2=562355
--Variant 3
Args=KL 562355
Arg1=KL
Arg2=562355
--Variant 4
Args=KL 562355
Arg1=KL
Arg2=562355
--Variant 5
Args=KL 562355
Arg1=KL
Arg2=562355

我得到了这个示例输出:

{{1}}

答案 1 :(得分:1)

使用Start-Process。您可以使用-ArgumentList $A,$B,...传递参数。

此外,您可以使用-PassThru调用它来接收流程对象并在其上调用WaitForExit()

这是msdn页面。