我在Windows 7中有三个bat文件
1)main.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"
为什么第二次尝试失败,我怎样才能让它发挥作用?它们之间的唯一区别是第一次尝试只传递一个参数,第二次尝试传递多个参数。
答案 0 :(得分: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