一周前,我写了这个脚本,当你登录然后根据当天的时间问候你时会启动它。今天早上它突然突然说:“时间无效”(如果所有其他elseif
选项与时间不匹配,它会这样做)。这曾经工作到今天。
这是我的代码:
Set objShell = CreateObject("WScript.Shell")
ctime = Time()
usr = objShell.ExpandEnvironmentStrings("%username%")
if ctime > "06:00:00" and ctime < "12:00:00" then
objShell.Popup "Good Morning, " & usr, 5, "", 4096
elseif ctime > "12:00:00" and ctime < "18:00:00" then
objShell.Popup "Good Afternoon, " & usr, 5, "", 4096
elseif ctime > "18:00:00" and ctime < "23:59:59" then
objShell.Popup "Good evening, " & usr, 5, "", 4096
elseif ctime > "00:00:00" and ctime < "06:00:00" then
objShell.Popup "Good night, " & usr, 5, "", 4096
else
objShell.Popup "Invalid time", 5, "", 4096
end if
编辑:好像它再次有效,现在已经是10点了,但由于某种原因它在10点之前没有用,我想我的代码中仍然有错误?
答案 0 :(得分:6)
您正在比较 time 和 string 数据子类型的值。 Comparison Operators (VBScript) reference有点不清楚(或关于自动数据子类型转换);我想将时间转换为 string 并使用替代的前导零操作,例如#09:10:12#
时间转换为"9:10:12"
或" 9:10:12"
字符串。因此,使用时间文字强制 time 进行比较,方法是将它们用数字符号(#
)括起来,例如#06:00:00#
而不是"06:00:00"
。
但是,您的逻辑仍然存在差距:例如#06:00:00#
或#12:00:00#
或#18:00:00#
时间不符合任何if
或elseif
条件,将提供无效时间输出。
因此,而不是
if ctime > "06:00:00" and ctime < "12:00:00" then
使用
if ctime >= #06:00:00# and ctime < #12:00:00# then
或
if ctime > #06:00:00# and ctime <= #12:00:00# then
并类似地改进所有elseif
。