Board logo

标题: [已解决]用VBS获取系统当前时间添加at任务 [打印本页]

作者: hackhd     时间: 2008-1-26 06:04    标题: [已解决]用VBS获取系统当前时间添加at任务
比如说现在一个VBS脚本运行起来在退出这个脚本前(因为前面有do loop语句所以运行后不会自动退出) 获取当前系统时间。只要分钟就好了 ,然后在获得的当前时间上+个5分钟,再运行这个VBS脚本 简单点说就像 at 系统当前时间(分钟)+5(分钟) xx.vbs wscript.quit [ Last edited by hackhd on 2008-1-27 at 07:24 PM ]

作者: slore     时间: 2008-1-26 12:28
msgbox time自己mid吧

作者: hackhd     时间: 2008-1-26 18:37
这样不行哦。

作者: fastslz     时间: 2008-1-26 19:07
Times = Time
NewTime = Split(times, ":" ,-1)
Wscript.echo NewTime(1)+5
'完整写法
Wscript.echo Time & "====加5分钟是====" & NewTime(0) & chr(58) & NewTime(1)+5 & chr(58) & NewTime(2)

作者: slore     时间: 2008-1-26 19:30
上面最后一句是Times

作者: slore     时间: 2008-1-26 19:31
貌似没有做55处理……

作者: fastslz     时间: 2008-1-26 19:57
是的其实首句是多余的,没做55+处理,我怕数字计算
NewTime = Split(time, ":" ,-1)
Wscript.echo NewTime(1)+5
Wscript.echo Time & "====加5分钟是====" & NewTime(0) & chr(58) & NewTime(1)+5 & chr(58) & NewTime(2)

作者: hackhd     时间: 2008-1-26 19:58
获取时间方法4楼说得很清楚了。谢谢啊。我把它整合起来添加一个DOS任务怎么就出错呢。 dim wsh set wsh=createobject("wscript.shell") set fso=createobject("scripting.filesystemobject") Times = Time NewTime = Split(times, ":" ,-1) command="at "&NewTime&"(1)+5 "&"1.vbs" retodate=wsh.Run(command,0,true)

作者: slore     时间: 2008-1-26 20:03
你msgbox下你的command就知道你自己错哪里了

作者: hackhd     时间: 2008-1-26 20:12
现在这样子已经以提示了command这行类型不匹配了 后面加msgbox没用。我是个菜菜还烦大哥再指点指点

作者: slore     时间: 2008-1-26 20:22
command = "at " & NewTime & "(1)+5 " & "1.vbs" 你照4楼的修改…… NewTime是个数组…… 不能单独,你的括号引用错误了。。。

作者: fastslz     时间: 2008-1-26 21:04
整点55分钟+5 及12点+1=01完整代码
NewTime = Split(Time, ":" ,-1)
if NewTime(1)+5 > 59 Then
   mm=NewTime(1)+5-60
   Newnn=Split(NewTime(0), " " ,-1)
   if Newnn(1)+1 = 13 Then
      nn="01"
      else
      nn=Newnn(1)+1
      end if
   Times = Newnn(0) & " " & nn & chr(58) & mm & chr(58) & NewTime(2)
   else
   Times = NewTime(0) & chr(58) & NewTime(1)+5 & chr(58) & NewTime(2)
end if
Wscript.echo Time & "====加5分钟是====" & Times

作者: hackhd     时间: 2008-1-26 21:23
哇。这么多代码。要是写个病毒怎么办。一个功能就占了这么多了。 a=Wsh.Run("at "&hour(now)&":"&((minute(now)+5) mod 60)&" 1.vbs",0,False) [ Last edited by hackhd on 2008-1-26 at 09:41 PM ]

作者: slore     时间: 2008-1-26 21:32
Newnn = Split(NewTime(0), " " , - 1) '不清楚用意 '将time Split就得到时分秒了啊…… 你那样貌似下标会越界……

作者: slore     时间: 2008-1-26 21:34
Originally posted by hackhd at 2008-1-26 21:23: 哇。这么多代码。要是写个病毒怎么办。一个功能就占了这么多了。 a=Wsh.Run("at "&hour(now)&":"&(minute(now)+5)&" 1.vbs",0,False)
不是由长短绝对代码的好坏的…… 你的这个觉得好麽? 12:56:36你的结果如何呢?而且at这样用是没有效果的吧

作者: hackhd     时间: 2008-1-26 21:41
已经考虑到了。 所以。 a=Wsh.Run("at "&hour(now)&":"&((minute(now)+5) mod 60)&" 1.vbs",0,False) 问题解决

作者: fastslz     时间: 2008-1-26 21:44
算了吧直接给你代码算了,at不支持上午下午的,还要格式化24小时制的
NewTime = Split(Time, ":" ,-1)
if NewTime(1)+5 > 59 Then
   mm=NewTime(1)+5-60
   Newnn=Split(NewTime(0), " " ,-1)
   if Newnn(1)+1 = 13 Then
      nn="01"
      else
      nn=Newnn(1)+1
      end if
   Times = Newnn(0) & " " & nn & chr(58) & mm & chr(58) & NewTime(2)
   else
   Times = NewTime(0) & chr(58) & NewTime(1)+5 & chr(58) & NewTime(2)
end if

dim wsh
set wsh=createobject("wscript.shell")
set fso=createobject("scripting.filesystemobject")
command = "at " &Chr(34) & FormatDateTime (Times ,vbShortTime) &Chr(34) &" 1.vbs"
retodate=wsh.Run(command),vbHide

作者: fastslz     时间: 2008-1-26 21:54
hour(now)&":"&((minute(now)+5) mod 60 哦之前,知道有这样计算方法,就是不知道参数怎么写

作者: slore     时间: 2008-1-26 22:35
f Newnn=Split(NewTime(0), " " ,-1) 这句你那里是通的麽? h? 你那叫考虑了?你那样要等1天才运行吧? 12:56+5=13:01 你那样到12:01去执行……也叫考虑了。。。

作者: fastslz     时间: 2008-1-26 22:59
Newnn=Split(NewTime(0), " " ,-1) if Newnn(1)+1 = 13 Then nn="01" else nn=Newnn(1)+1 end if 已经转换了

作者: slore     时间: 2008-1-26 23:02
NewTime(0)里面不包含空格……你这个是什么意思啊? 按空格分割后,newnn(1)是不存在的……你那样就下标越界了…… 第一次将time分割后,0 1 2分别是h,m,s

作者: fastslz     时间: 2008-1-26 23:14
Wscript.echo Time 下午空格HH:MM:SS
TimeTmp="下午 12:56:00" NewTime = Split(TimeTmp, ":" ,-1) if NewTime(1)+5 > 59 Then mm=NewTime(1)+5-60 Newnn=Split(NewTime(0), " " ,-1) if Newnn(1)+1 = 13 Then nn="01" else nn=Newnn(1)+1 end if Times = Newnn(0) & " " & nn & chr(58) & mm & chr(58) & NewTime(2) else Times = NewTime(0) & chr(58) & NewTime(1)+5 & chr(58) & NewTime(2) end if Wscript.echo Times Wscript.echo FormatDateTime (Times ,vbShortTime)

作者: fastslz     时间: 2008-1-26 23:19
2种代码能达到楼主的目的讨论没有意义了

作者: slore     时间: 2008-1-26 23:22
Originally posted by fastslz at 2008-1-26 23:19: 2种代码能达到楼主的目的讨论没有意义了
。。。。是说当系统选用24制的时候是不会出现“下午 ”字样的…… 这个代码的移植性…… 他的代码没有做进位虽然是1句话…… 我是说这个问题。。。与方法无关。

作者: hackhd     时间: 2008-1-26 23:27
哦也。讨论得还真激烈。当然我一句话只是达到我的目的,因为我不需要上午下午的判断 只要系统当时间+5就行了。 大家讨论的也对。是另一种思路 不管什么方法。我只希望代码能尽量的精简 [ Last edited by hackhd on 2008-1-26 at 11:29 PM ]

作者: zh159     时间: 2008-1-27 01:14
就一个DateAdd
Wscript.echo FormatDateTime(DateAdd("n",5,now),vbShortTime)

作者: fastslz     时间: 2008-1-27 14:35
晕DateAdd函数原来这么简单,之前我把它复杂化了 Vbs时间换算太灵活了 vbs脚本如果英语基础好的话,写脚本如同写短句,之所以中国软件业不如后来居上印度也是因为本地化语言障碍。

作者: hackhd     时间: 2008-1-27 19:07
Wsh.Run "at "&hour(now)&":"&((minute(now)+5) mod 60)&" 1.vbs",0,False FormatDateTime(DateAdd("n",5,now),vbShortTime) 也不错啊。。