2014-12-22 106 views
1

我已经在Windows 7为什么第二个参数会导致此脚本失败?

1)main.bat 3个BAT文件:

test testEcho parm1 parm2 

2)下的test.bat:

@echo With one parm 
"C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe" -nologo -noprofile^
    -executionpolicy bypass -command "& {start-process -verb 'runas' -file %1.bat %2}" 

@echo With two parms 
"C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe" -nologo -noprofile^
    -executionpolicy bypass -command "& {start-process -verb 'runas' -file %1.bat %2 %3}" 

pause 

3)testEcho.bat:

@echo ==== 0:%0 1:%1 2:%2 
pause 

当我运行main.bat时,它传递目标bat文件(testEcho)的名称和两个参数。然后我使用PowerShell两次运行传入的bat文件名(%1 = testEcho)。第一次使用一个参数(%2 = parm1),第二次使用两个参数(%2 = parm1,%3 = parm2)。

第一次按预期工作,使用一个参数运行testEcho.bat。它回声结果:

==== 0:C:\testEcho.bat 1:parm1 2: 

第二次运行失败,错误:

"Start-Process: A positional parameter cannot be found that accepts 
    argument 'parm2'.At line:1 char:4" 

为什么在第二次尝试失败,我怎么能得到它的工作?它们之间的唯一区别是第一次尝试只传递一个参数,而第二次尝试传递多个参数。

回答

3

您需要指定一个ArgumentList以便使用多个参数。这些参数需要用逗号分隔。 http://ss64.com/ps/start-process.html

@echo With one parm 
"C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe" -nologo -noprofile^
    -executionpolicy bypass -command "& {start-process -verb 'runas' -file %1.bat %2}" 

@echo With two parms 
"C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe" -nologo -noprofile^
    -executionpolicy bypass -command "& {start-process -verb 'runas' -file %1.bat -ArgumentList %2, %3}" 

pause 
相关问题