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"
我有一个 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"