[英]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 调用Runtime.getRuntime().exec()
首先触发 VBScript Hosted 可执行文件(可能是cscript.exe
或wscript.exe
)并传递要执行的脚本文件路径,这需要两个参数在您发送到exec()
的命令数组中。
从executable
和script
命令数组参数之后的屏幕截图中,我只看到传递了 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.