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

Automation 如何使用VBS捕捉命令窗口的输出,并用播放的声音通知用户?,automation,vbscript,Automation,Vbscript,我已成功地使用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://fireb

我已成功地使用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:\Users\Zed\testing.json"
wscript.sleep 100
WshShell.SendKeys "{ENTER}"
WshShell.SendKeys "{ENTER}"
以下是控制台输出:

firebase-import --service_account C:\Users\Zed\private-firebase-adminsdk-private --path /Jobs/Test --database_url https://private.firebaseio.com  --json C:\Users\Zed\testing.json
All data at https://private.firebaseio.com/Jobs/Test will be overwritten.
Press <enter> to proceed, Ctrl-C to abort.

Reading C:\Users\Zed\testing.json... (may take a minute)
Preparing JSON for import... (may take a minute)
Importing [==================================================] 100% (1/1)

Import completed.
firebase导入--服务\帐户C:\Users\Zed\private firebase adminsdk private--路径/作业/测试--数据库\ urlhttps://private.firebaseio.com  --json C:\Users\Zed\testing.json
所有数据在https://private.firebaseio.com/Jobs/Test 将被覆盖。
按继续,按Ctrl-C中止。
正在阅读C:\Users\Zed\testing.json。。。(可能需要一分钟)
正在准备导入JSON。。。(可能需要一分钟)
导入[================================================================================================]100%(1/1)
导入已完成。
我还设法用VBS播放声音。代码如下:

Dim oPlayer
Set oPlayer = CreateObject("WMPlayer.OCX")

' Play audio
oPlayer.URL = "C:\Users\Zed\notify.mp3"
oPlayer.controls.play 
While oPlayer.playState <> 1 ' 1 = Stopped
  WScript.Sleep 100
Wend

' Release the audio file
oPlayer.close
Dim oPlayer
设置oPlayer=CreateObject(“WMPlayer.OCX”)
“播放音频
oPlayer.URL=“C:\Users\Zed\notify.mp3”
oPlayer.controls.play
而oPlayer.playState 1'1=已停止
WScript.Sleep 100
温德
'释放音频文件
oPlayer.close

现在,如何将这两者结合起来,使声音仅在控制台窗口中显示
导入完成
消息时播放?

正如Mofi在评论中指出的,您可以随时禁用
所有数据https://private.firebaseio.com/Jobs/Test 将被覆盖。
提示,可避免发送击键。您只需使用Windows脚本主机
Run
方法:

Dim objWshShell
Dim sCommand

sCommand = "firebase-import --service_account C:\Users --database_url https://firebaseio.com  --json C:\Users\Zed\testing.json"

Set objWshShell = WScript.CreateObject("WScript.Shell")
objWshShell.Run sCommand, 1, True
您还可以将播放声音的代码包装成
子文件

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
编辑

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

sCommand = "cmd /c firebase-import --service_account C:\Users --database_url https://firebaseio.com  --json C:\Users\Zed\testing.json > C:\temp\output.txt"
然后,您可以读取该文件并查找
“导入已完成”

运行命令后,可以使用此子项:

objWshShell.Run sCommand, 1, true
CheckOutput

如果您阅读了本实用程序主页上仔细显示的
firebase import
文件,阅读“用法”部分后,您将节省大量时间:
--强制在覆盖数据之前不要提示。
由于复制了输出文本,所以阅读也会很好,因为文本会再次节省您的时间,并且您会将最像的所有字符串设置为私有,而您不想将其公开。打开,运行
where firebase import
并查看完整的限定文件名。我还没有安装这个实用程序。但是,如果输出文件名以
.exe
结尾,则根本不需要执行
cmd.exe
,因为可执行文件可以直接从Visual Basic脚本中执行。您可以使用该方法运行
cmd.exe
firebase import
(作为可执行文件时),并将
bWaitOnReturn
设置为
TRUE
。该方法将为您提供捕获输出的选项。
Sub CheckOutput()
    Dim sOutput
    Dim objFSO, objFileReader

    Set objFSO  = CreateObject("Scripting.FileSystemObject")
    Set objFileReader = objFSO.OpenTextFile("c:\temp\output.txt", 1)
    sOutput = objFileReader.ReadAll
    objFileReader.Close

    If InStr(sOutput, "Import Completed") > 0 Then
        PlaySound ("C:\Users\Zed\notify.mp3")
    Else
        PlaySound ("C:\Users\Zed\error.mp3")
    End If

End Sub
objWshShell.Run sCommand, 1, true
CheckOutput