【问题标题】:How to pass double quoted arguments into vbscript?如何将双引号参数传递给 vbscript?
【发布时间】:2019-12-06 20:47:09
【问题描述】:

我是 vbScript 的新手。我有一个脚本,我正在调用一个包含双引号的参数。以下是通话 .vbs "a" 2 其中变量 a 是 JO"N

我的 VbScript:

If WScript.Arguments.Count > 0 Then     
MsgBox "NAME:" + WScript.Arguments.Item(0) 
MsgBox "NAME:" + WScript.Arguments.Item(1)
Else    
MsgBox "Please pass a parameter to this script" 
End if

*注意这在 a = JON 时有效,但在 a= JO“N”时无效。我尝试放置转义字符”(示例:“WScript.Arguments.Item(0)”)但它不起作用。

【问题讨论】:

标签: vbscript


【解决方案1】:

你不能。

至少,当WScript 参数解析器处理并删除Arguments 集合中的值的所有引号时,您不能对此任务使用默认参数处理。

注意:如果您在调用脚本时运行的最终命令(您没有包括如何/从哪里进行调用)是否会出现问题,我们将忽略这个问题因为额外的引号会干扰参数引用规则。

您需要使用一些解决方法来获取双引号以到达脚本。一些方法可能是:

  • 在调用脚本之前替换引号和任何其他有问题的字符(使用某种转义序列)并恢复脚本中的进程。

  • 将您要传递的值保存到环境变量中(如何实现取决于您调用脚本的方式),然后从您的脚本中检索该值(例如here)。

  • 使用WMI 检索用于启动脚本的完整命令行,包括所有引号(例如here)并编写您自己的参数解析器例程。

从我的角度来看,我会使用第二个选项。

【讨论】:

  • "在调用脚本之前替换引号和任何其他有问题的字符(使用某种转义序列)并恢复脚本中的进程。"工作得很好。谢谢!
【解决方案2】:

这将起作用:Chr(34) & Wscript.Arguments.Item(0) & Chr(34)。这里Chr(34) 函数使用其 ASCII 码 34 返回一个双引号。

【讨论】:

  • 我尝试了上述方法,但没有成功。 MsgBox "NAME:" + Chr(34) & WScript.Arguments.Item(2) & Chr(34) 给出相同的错误:13 类型不匹配
  • 请注意,您已使用 + 代替 &,因此会出现错误。
  • 所以正确的说法应该是:MsgBox "NAME:" & Chr(34) & WScript.Arguments.Item(2) & Chr(34) ?
猜你喜欢
  • 1970-01-01
  • 2018-03-26
  • 1970-01-01
  • 1970-01-01
  • 2019-07-19
  • 1970-01-01
  • 2018-01-27
  • 1970-01-01
  • 2017-10-31
相关资源
最近更新 更多