如何使用VBS捕捉命令窗口的输出并用播放的声音通知用户



我成功地使用VBS打开cmd,将数据写入数据库,并按Enter键两次。

这是我的代码:

Set wshshell = wscript.CreateObject("WScript.Shell") 
Wshshell.run "cmd" 
wscript.sleep 100
wshshell.sendkeys "firebase-import --service_account C:Users --database_url https://firebaseio.com  --json C:UsersZedtesting.json"
wscript.sleep 100
WshShell.SendKeys "{ENTER}"
WshShell.SendKeys "{ENTER}"

这是控制台输出:

firebase-import --service_account C:UsersZedprivate-firebase-adminsdk-private --path /Jobs/Test --database_url https://private.firebaseio.com  --json C:UsersZedtesting.json
All data at https://private.firebaseio.com/Jobs/Test will be overwritten.
Press <enter> to proceed, Ctrl-C to abort.
Reading C:UsersZedtesting.json... (may take a minute)
Preparing JSON for import... (may take a minute)
Importing [==================================================] 100% (1/1)
Import completed.

我还设法用VBS播放了一个声音。这是代码:

Dim oPlayer
Set oPlayer = CreateObject("WMPlayer.OCX")
' Play audio
oPlayer.URL = "C:UsersZednotify.mp3"
oPlayer.controls.play 
While oPlayer.playState <> 1 ' 1 = Stopped
WScript.Sleep 100
Wend
' Release the audio file
oPlayer.close

现在,如何将这两者结合起来,使声音只在控制台窗口中显示Import completed消息时播放?

正如Mofi在评论中指出的那样,您可以禁用All data at https://private.firebaseio.com/Jobs/Test will be overwritten.提示,从而避免发送按键。您可以简单地使用Windows脚本主机Run方法:

Dim objWshShell
Dim sCommand
sCommand = "firebase-import --service_account C:Users --database_url https://firebaseio.com  --json C:UsersZedtesting.json"
Set objWshShell = WScript.CreateObject("WScript.Shell")
objWshShell.Run sCommand, 1, True

您还可以将播放声音的代码包装成Sub:

Sub PlaySound(p_sURL)
Dim oPlayer
Set oPlayer = CreateObject("WMPlayer.OCX")

' Play audio
oPlayer.URL = p_sURL
oPlayer.Controls.play
While oPlayer.playState <> 1 ' 1 = Stopped
WScript.Sleep 100
Wend

' Release the audio file
oPlayer.Close
End Sub

您可以在objWshShell.Run sCommand, 1, true:之后调用此子程序

objWshShell.Run sCommand, 1, true
PlaySound ("C:UsersZednotify.mp3")

编辑

为了确定导入过程的结果,您可以将输出重定向到一个文本文件:

sCommand = "cmd /c firebase-import --service_account C:Users --database_url https://firebaseio.com  --json C:UsersZedtesting.json > C:tempoutput.txt"

然后,您可以读取文件并查找"Import Completed":

Sub CheckOutput()
Dim sOutput
Dim objFSO, objFileReader
Set objFSO  = CreateObject("Scripting.FileSystemObject")
Set objFileReader = objFSO.OpenTextFile("c:tempoutput.txt", 1)
sOutput = objFileReader.ReadAll
objFileReader.Close
If InStr(sOutput, "Import Completed") > 0 Then
PlaySound ("C:UsersZednotify.mp3")
Else
PlaySound ("C:UsersZederror.mp3")
End If
End Sub

您可以在运行命令后使用此子:

objWshShell.Run sCommand, 1, true
CheckOutput

最新更新