windows - 为什么第二个参数会导致此脚本失败?

标签 windows powershell batch-file cmd

我在 Windows 7 中有三个 bat 文件

1) 主.bat:

test testEcho parm1 parm2

2) 测试.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) 测试回声.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"

为什么第二次尝试失败,我该如何让它工作?它们之间的唯一区别是第一次尝试只传递一个参数,而第二次尝试传递多个参数。

最佳答案

您需要指定一个 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

关于windows - 为什么第二个参数会导致此脚本失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27607078/

相关文章:

batch-file - 如何更改通过运行批处理脚本创建的新 cmd 窗口(连同自定义提示)的颜色

windows - 如何根据列号分隔固定宽度的文本文件

c# - 如何处理 Form.MaximumBox 点击

windows - powershell:get-psdrive 和 where-object

c# - 在 C# 中清除 Powershell 流

string - 通过 Powershell 进行日志解析 - 打印第 n 个元素之后的所有数组元素

batch-file - Powershell ISE - 如何通过命令启动新选项卡

c++ - 在Linux中,等效于在c/c++中打开物理驱动器的句柄并写入MBR的方法是什么?

java - 将 Windows 预期批处理转换为 OSX 批处理

我们可以为ArmV4I平台编译Azure IoT C SDK吗?