返回列表 发帖

[问题求助] [已解决]求助vbs代码改写:实现判断当前是否在指定时间段,并做不同操作。

本帖最后由 ygqiang 于 2016-3-11 12:33 编辑

[已解决]vbs:11点45这个时刻自动关机。修改成:如果处于某个时间段,过5分钟后就自动关机。

比如,昨天晚上11点45,到今天凌晨5点55这个时间段。

vbs脚本一运行就间隔40秒,循环1次做时间判断,
如果是在这个时间段内,就弹出窗口提示,并马上延时5分钟自动关机。
Option Explicit
'定义常量,在这里设置关机时间
Const ObjHour   = 11   '时 0-23
Const ObjMinute = 45   '分 0-59
Const ObjSecond = 00   '秒 0-59
'检查输入是否合法
Dim IsInputLegal
IsInputLegal = True
If ObjHour < 0 Or ObjHour > 23 Then
    IsInputLegal = False
End If
If ObjMinute < 0 Or ObjMinute > 59 Then
    IsInputLegal = False
End If
If ObjSecond < 0 Or ObjSecond > 59 Then
    IsInputLegal = False
End If
If IsInputLegal = False Then
    WScript.Echo "输入非法 时区间:[0-23] 分区间:[0,59] 秒区间:[0,59]"
    WScript.Quit
End If
'定义变量
Dim ObjTime    '目标时间
Dim CurTime    '当前时间
Dim CurHour    '当前时
Dim CurMinute  '当前分
Dim CurSecond  '当前秒
ObjTime = "指定关机时间:" & ObjHour & "时 " & ObjMinute & "分 " & ObjSecond & "秒"
Dim IsTimeOut
IsTimeOut = False
'时间到则终止循环
Do Until IsTimeOut = True
     
    CurHour = Hour(Now)
    CurMinute = Minute(Now)
    CurSecond = Second(Now)
     
    CurTime = "当前时间:" & CurHour & "时 " & CurMinute & "分 " & CurSecond & "秒"
    'WScript.Echo ObjTime & " | " & CurTime
     
    If (CurHour = objHour And CurMinute = objMinute And CurSecond = objSecond) Or _
        (Hour(Now) = objHour And Minute(Now) = objMinute And Second(Now) = objSecond+1) Then
        IsTimeOut = True
    End If
     
    WScript.Sleep(1000)
     
Loop
WScript.CreateObject("wscript.shell").Run "shutdown -s -t 300", 0
'WScript.Echo vbCrlf
WScript.Echo "收拾收拾准备睡觉啦!5分钟后我会把你的电脑关掉哦~~~"
'WScript.Echo "在控制台输入命令 shutdown -a 可以取消关机计划"
'WScript.Echo vbCrlfCOPY
1

评分人数

    • pcl_test: 改一点发一次也是醉了PB -4

本帖最后由 ygqiang 于 2016-3-21 12:32 编辑

初步解决了....
st=#23:45#
et=#05:45#
Set Ws= WScript.CreateObject("WScript.Shell")
Do
If (Time>st And Time<#23:59:59#) Or (Time>#0:00# And Time <et) Then
[说] "收拾收拾准备睡觉啦!5分钟后我会把你的电脑关掉哦!!!"
ws.Run "shutdown /f /s /t 300", 0,false
WScript.quit
Else
'[说] " 时间还没到"
End If
Wscript.Sleep 40000 '减少CPU占用 每40秒检测一次
Loop
Function  [说]([内容])
    [说]= ws.popup(vbcrlf&[内容]&vbcrlf,10,"妈妈咪妈妈咪妈妈咪妈妈咪妈妈咪妈妈咪妈妈咪妈妈咪妈妈咪妈妈咪",8+8)
End FunctionCOPY
statime=#23:35#
endtime=#05:35#
sameday = true
if statime>endtime then sameday = false
Set Ws= WScript.CreateObject("WScript.Shell")
Do
ringtime = false
if sameday = true and Time>statime and Time<endtime then
  ringtime = true
else if sameday = false and (Time>statime or Time<endtime) then
  ringtime = true
else
'[说] "哈哈"
end if
end if
if ringtime = true then
[说] "收拾收拾准备睡觉啦!5分钟后我会把你的电脑关掉哦!!!"
       ws.Run "shutdown /f /s /t 30", 0,false
       wscript.quit
Else
'[说] "时间还没到"
End If
Wscript.Sleep 40000 '减少CPU占用 每40秒检测一次
Loop
Function  [说]([内容])
set [wscr]=wscript.createObject("wscript.shell")  
    [说]= [wscr].popup(vbcrlf&[内容]&vbcrlf,10,"妈妈咪妈妈咪妈妈咪妈妈咪妈妈咪妈妈咪妈妈咪妈妈咪妈妈咪妈妈咪",8+8)
End FunctionCOPY

TOP

本帖最后由 ygqiang 于 2016-3-21 12:33 编辑

另一个vbs解决代码.....
Do
dtmStaDate1 =date()&" 23:35:00"
dtmStaDate2 =date()&" 23:59:00"
dtmEndDate1 =  date()&" 00:00:00"
dtmEndDate2 =  date()&" 05:35:00"
call time_add(dtmStaDate1,dtmStaDate2)
call time_add(dtmEndDate1,dtmEndDate2)
  WScript.Sleep 40000
'循环40秒判断
Loop
function time_add(ActionTime1,ActionTime2)
[时光流逝1]=DateDiff("s", Now, ActionTime1)   
[时光流逝2]=DateDiff("s", Now, ActionTime2)  
If  [时光流逝1] < 0 and [时光流逝2] > 0  Then   ' [时光流逝] 表示时间过去了那么多秒 :正数是还要等待。负数是已经到了未来指定时间  
       [说] "收拾收拾准备睡觉啦!5分钟后我会把你的电脑关掉哦~~~"
       WScript.CreateObject("wscript.shell").Run "shutdown /f /s /t 300", 0,false
       wscript.quit
Else
    '[说] " 时间还没到"
End If
end function
Function  [说]([内容])
set [wscr]=wscript.createObject("wscript.shell")  
    [说]= [wscr].popup(vbcrlf&[内容]&vbcrlf,10,"妈妈咪妈妈咪妈妈咪妈妈咪妈妈咪妈妈咪妈妈咪妈妈咪妈妈咪妈妈咪",8+8)
End FunctionCOPY

TOP

回复 3# ygqiang


   
缺点如果不点你弹出的信息框,就可以阻止关机
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

回复 4# ivor


    经过测试,一样也是可用的。

不点弹出的信息框,也会自动关机

TOP

返回列表