1

好的,我是编写 VBScript 的新手,我想编写一串代码,仅在某一天且仅在特定时间之间播放文件(WAV 格式)。在将我在互联网上找到的多个代码片段拼凑在一起后,我得到了以下内容:

Dim myDateString 
Dim thing1 
thing1 = 0 
myDateString = Date() 
If myDateString < "13/08/13" Then 
thing1 = 1 
end if 
if thing1 = 1 then  
If myDateString > "15/08/13" Then 
thing1 = 2 
end if  
end if

if thing1 = 2 then 

hournow = hour(Time())
If hour(Time()) >= 9 And Hour(Now()) < 22 Then

set WshShell = CreateObject("WScript.Shell")

music = "C:\Users\MYUSERNAME\Desktop\MYSOUND.wav"

WshShell.Run "wmplayer """ & music & """",0,True

Else     
wscript.quit 1 
End If

Else
wscript.quit 1
End If

好的,所以我已将其设置为我运行它的日期,在我进入的一小时内。但它没有用。我希望 VBS 开始播放 MYSOUND.wav,但它没有。运行文件时没有错误,所以我想知道我做错了什么!

我运行 Windows 7

如果有人能告诉我我做错了什么,以及如何解决它,那就太好了。

如果有人可以发布代码的更正版本,请加倍积分!

感谢任何答案!

4

1 回答 1

2

首先,缩进你的代码并给你的变量起有意义的名字!

然后,您的日期比较不起作用,因为您试图比较字符串,就好像它们是日期一样。这通常不起作用(取决于您的“系统语言环境”):您需要使用日期类型变量和实际的日期比较函数(VBScript 中的 DateDiff)。

(编辑:正如 Ansgar Wiechers 指出的那样,您不需要使用 DateDiff 来比较 VBScript 中的日期,“DateStart <= Now And Now <= DateEnd” 就可以了)

试试这个:

Dim DateStart, DateEnd, WshShell, music

DateStart = DateSerial(2013, 8, 13)
DateEnd = DateSerial(2013, 8, 15)
If DateDiff("D", DateStart, Now) >= 0 And DateDiff("D", Now, DateEnd) >= 0 Then
    If Hour(Now) >= 9 And Hour(Now) < 22 Then
        '*** delete after debugging ***
        MsgBox "play sound"
        Set WshShell = CreateObject("WScript.Shell")
        music = "C:\Users\MYUSERNAME\Desktop\MYSOUND.wav"
        '*** 2nd parameter : 0 hides wmplayer, 1 shows it ***
        WshShell.Run "wmplayer """ & music & """", 1, True
    Else
        '*** delete after debugging ***
        MsgBox "Not the right time"
    End If
Else
    '*** delete after debugging ***
    MsgBox "Not the right day"
End If

此外,如果您想调试这样的小脚本,您可以调用 MsgBox 对实际执行的内容进行简单跟踪(在您的示例中,将“WScript.Quit 1”替换为 MsgBox 会显示日期不正确比较的。

于 2013-08-14T12:16:04.470 回答