2014-12-22 142 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 
相關問題