繁体   English   中英

Runtime.exec() 中可以传递的最大参数数量是多少?

[英]What is the maximum number of arguments that can be passed in a Runtime.exec()?

我正在尝试将大量参数传递给Runtime.().exec

Runtime.getRuntime().exec(new String[] { executable, script, fnamePath, blah, blah, .... });

添加第 12 个参数后的脚本说:

错误:下标超出范围
代码:800A0009

你能告诉我什么是传递大量争论的最佳方式吗? 或者,请纠正我的方法以实现传递大量参数。

如果需要任何进一步的细节,请告诉我...

VBS 代码:

Set objOutlook = CreateObject("Outlook.Application")
'Set objNameSpace = objOutlook.GetNamespace("MAPI")
Set myMail = objOutlook.CreateItem(0)
Set Arg = WScript.Arguments
myMail.Attachments.Add Arg(0) 'Just to let you know I'm using the Arg(0) as well
IMED = Arg(1)
URL = Arg(2)
dashLoad = Arg(3)
roles = Arg(4)
consent = Arg(5)
dash = Arg(6)
servMenu = Arg(7)
folowUp = Arg(8)
servReq = Arg(9)
SRN = Arg(10)
PoP = Arg(11)
Doc = Arg(12)
SalesDashLoad = Arg(13)
MsgBox (SalesDashLoad) ' THIS LINE gives me error, till Agr(12) works fine!

在 Java 中执行上面的 VBS: Java 中的运行时方法

结果错误消息:

VBS 错误

传递的参数没有限制,但这不是问题。

您需要记住 Java 调用Runtime.getRuntime().exec()首先触发 VBScript Hosted 可执行文件(可能是cscript.exewscript.exe并传递要执行的脚本文件路径,这需要两个参数在您发送到exec()的命令数组中。

executablescript命令数组参数之后的屏幕截图中,我只看到传递了 13 个参数,但 VBScript 需要 14 个WshArguments对象集合使用从零开始的索引)

正如@Yuanyo 上面提到的,您在传递的参数列表中缺少SalesDashload ,这使其成为第 14 个参数,它将在 VBScript 中将其映射到Arg(13)

更正后的输入将类似于(显然我不知道您的变量被称为什么,只能根据您现有的变量进行猜测或推断)

Runtime.getRuntime().exec(new String[] {executable, script, fnamePath, loginScr1, stLink1, dashLoad1, role1, consent1, dash1, servMenu1, followUp1, servReq1, SRN1, PoP1, docSubmit1, salesDashLoad1 });

您可以在 VBScript 中捕捉到这一点,方法是在继续脚本之前使用Arg.Count检查您是否有 14 个参数,如果不这样做或退出脚本,可能会抛出错误

Dim objOutlook, myMail, Arg
Const ExpectArgCount = 14
Set objOutlook = CreateObject("Outlook.Application")
'Set objNameSpace = objOutlook.GetNamespace("MAPI")
Set myMail = objOutlook.CreateItem(0)
Set Arg = WScript.Arguments

If Arg.Count = ExpectArgCount Then
  myMail.Attachments.Add Arg(0)
  IMED = Arg(1)
  URL = Arg(2)
  dashLoad = Arg(3)
  roles = Arg(4)
  consent = Arg(5)
  dash = Arg(6)
  servMenu = Arg(7)
  folowUp = Arg(8)
  servReq = Arg(9)
  SRN = Arg(10)
  PoP = Arg(11)
  Doc = Arg(12)
  SalesDashLoad = Arg(13)
  MsgBox (SalesDashLoad)
Else
  Call Err.Raise(vbObjectError + 1, "My Application", "Incorrect number of arguments passed")
End If

问题好像是索引,你用的。 您缺少 SalesDashLoad 的参数。

你应该有类似的东西: Runtime.getRuntime().exec(new String[] {executable, script, fnamePath, loginScr1, stLink1, dashLoad1, role1, consent1, servMenu1, followUp1, servReq1, SRN1, PoP1, docSubmit1, salesDLoad1});

Arguments 属性包含 WshArguments 对象(一组参数)。 使用从零开始的索引从此集合中检索各个参数。

您可以在此处阅读更多信息: https : //docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/windows-scripting/z2b05k8s(v=vs.84)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM