VBScript 命令行难题?

The VBScript Command Line Conundrum?

我有一个 HTA,我可以在其中将 IP(用户在 HTML 文本框中输入 txtIP.value)传递给供应商的管理软件 - 一切正常。但是,有时设备不会响应 GUI 请求,但会响应 ping 请求。我有一个非常好的 ping 命令,我使用它将 ping 命令 returns 传递给另一个 cmd,它更改提示以显示每个回复的时间,这允许我观看多个设备并协调丢失或高 ping。我终其一生都无法将此命令传递给命令行。感谢您提供任何帮助。

'********************************************************************
'Trying to run the following command:
'* ping -t 172.17.100.33|cmd /q /v /c "(pause&pause)>nul & for /l %a in () do (set /p "data=" && echo(!time! !data!)&ping -n 2 localhost>nul"
'********************************************************************
Sub TimedPing
  'Set the HTML Field value - for testing purposes
  txtIP.value = "172.17.100.33"

  strIP1 = "ping -t " 
  strIP2 = txtIP.value
  strIP3 = "|cmd /q /v /c "
  strIP4 = """(pause&pause)>nul & "
  strIP5 = "for /l %a in ()"
  strIP6 = "do (set /p "
  strIP7 = " ""data="" && echo(!time! !data!)&ping -n 2 localhost>nul"""

  Set objShell = CreateObject ("WScript.Shell")

  MsgBox("Step 1: " & strIP1 & strIP2 & strIP3 & strIP4 & strIP5 & strIP6 & strIP7)
  txtCmd1.value = strIP1 & strIP2 & strIP3 & strIP4 & strIP5 & strIP6 & strIP7  
  objShell.Run strIP1 & strIP2 & strIP3 & strIP4 & strIP5 & strIP6 & strIP7

  MsgBox("Step 2: " & "ping -t 172.17.100.33|cmd /q /v /c ""(pause&pause)>nul & for /l %a in () do (set /p ""data="" && echo(!time! !data!)&ping -n 2 localhost>nul""")
  txtCmd2.value = "ping -t 172.17.100.33|cmd /q /v /c ""(pause&pause)>nul & for /l %a in () do (set /p ""data="" && echo(!time! !data!)&ping -n 2 localhost>nul"""
  objShell.Run "ping -t 172.17.100.33|cmd /q /v /c ""(pause&pause)>nul & for /l %a in () do (set /p ""data="" && echo(!time! !data!)&ping -n 2 localhost>nul"""

  MsgBox("Step 3: " & strIP1 & strIP2)
  objShell.Run strIP1 & strIP2

  MsgBox("Step 4: CMD")
  objShell.Run "cmd"

End Sub

步骤 1 编译(HTA 刷新时没有错误消息)并且 运行 没有可见错误。 DOS 屏幕立即打开和关闭,不显示任何内容。我试过在那里暂停一下,但也没用。

步骤 2 做同样的事情。

步骤 3 工作正常。

步骤 4 工作正常。

我将发送 objShell.Run 命令的值转储到单独的文本框,以比较它们与原始文本框的匹配程度。在获得与原始命令相同的结果后,我可以从 HTA 复制文本并在命令 window 中 运行 它,对于第一步和第二步都没有错误,但除了快速关闭之外我什么也没得到来自 运行 命令的命令 window。有什么想法吗?

也许有一天,有人会找到这个问题的答案。在那之前,我可以执行此命令的唯一方法是使用 bat 文件(在尝试不创建一个 bat 文件数小时后 - 我在几个小时内使用了可变 IP 地址和颜色)。有趣的是,就像 Geert Bellekens 提到的那样,我不得不用其他命令启动 bat 文件(我使用了@echo off),然后我不得不在命令本身的百分号上加倍。为了完整起见,下面是 运行 调用 bat 文件的代码,传递一些变量(IP 地址和颜色主题),然后 bat 文件开始工作。仅供参考,我使用 If-Then-Else 语句来检查用户选择了哪个主题,VBS 脚本中的第二个变量根据他们选择的颜色而变化。我会显示默认值。

HTA 中的 VBScript 由 HTML 按钮点击触发。

Sub TimedPing
Set objShell = CreateObject ("WScript.Shell")
objShell.Run "TimedPing.bat " & txtIP.value & " " & 07
End Sub

 

bat文件与HTA存放在同一目录:

@echo off
title Timed Ping
color %2
@ping -t %1|cmd /q /v /c "(pause&pause)>nul & for /l %%a in () do (set /p "data=" && echo(!time! !data!)&ping -n 2 localhost>nul"