【问题标题】:VBS file Freezes when run from a different directory in a Batch fileVBS 文件从批处理文件中的不同目录运行时冻结
【发布时间】:2017-12-30 19:32:04
【问题描述】:

我有一个批处理文件,它被编程为运行 VBS 文件。在VBS文件中,编程为播放Ping.mp3隐藏(代码如下)。当批处理文件运行时,VBS 文件和批处理文件一样冻结,如下面的屏幕截图所示。

BAT代码:

@echo off
cls
pushd %~dp0
Files\Ping.vbs
pause
popd

VBS 代码:

Set Sound = CreateObject("WMPlayer.OCX.7")
Sound.URL = "Ping.mp3"
Sound.Controls.play
do while Sound.currentmedia.duration = 0
wscript.sleep 100
loop
wscript.sleep (int(Sound.currentmedia.duration)+1)*1000

我检查了问题是否基于网络,但不是。 我还检查了问题是否是 pushd 和 popd 命令,不是。

任何帮助将不胜感激。

【问题讨论】:

  • 我在该窗口的标题中看到了一个 UNC 路径,您是否会因为共享不受信任而受到沙盒/受限访问权限的影响?您是否尝试将文件复制到本地磁盘并查看它们是否有效?
  • 我尝试在本地磁盘上运行它,但得到了相同的结果。

标签: windows batch-file cmd vbscript


【解决方案1】:

我没有网络资料,但是当 Ping.mp3 位于“文件”目录(Ping.vbs 所在的目录)中时,我使用您的代码复制了“冻结”。它在 mp3 与批处理文件位于同一目录中时播放。这意味着vbs看到的“当前目录”(仍然)是pushd %~dp0给出的目录。因此,如果您的 Ping.mp3 位于“文件”目录中,我建议将 Sound.URL = "Ping.mp3" 替换为 Sound.URL = "File\Ping.mp3"

【讨论】:

    【解决方案2】:

    无需使用批处理,您不必 cd 到文件夹。 如果您确实使用批处理,请确保启动脚本的是 cscript.exe 而不是 wscript.exe。 只需使用 URL 中的完整路径。 如果文件不存在,您将获得“冻结”。

    它有助于在控制台中显示一些信息,以便您知道脚本在哪里暂停,一个原始的调试..

    以下适用于我的系统。

    Set Sound = CreateObject("WMPlayer.OCX")
    Wscript.echo "Media player loaded"
    Sound.settings.volume = 50
    Sound.URL = "C:\Users\user\vbscript\mp3\ping.mp3"
    Wscript.echo "start playing"
    Sound.Controls.play
    while Sound.Playstate <> 1
      Wscript.echo Sound.currentmedia.duration
      Wscript.sleep 100
    wend
    

    【讨论】:

    • 是的,这也是我的猜测。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2016-12-04
    • 2011-07-20
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    相关资源
    最近更新 更多