找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26637|回复: 8

[问题求助] 求助解决VBS获取网络上的时间校准本机系统时间的代码报错的原因

[复制链接]
发表于 2015-1-17 12:17:58 | 显示全部楼层 |阅读模式
老师下了以下VBS校准系统时间在有线网络行,无线就不行,请修改!!谢谢!!
http://www.bathome.net/redirect. ... 4203&ptid=21616
运行vbs显示提示如下:
 楼主| 发表于 2015-1-17 22:17:19 | 显示全部楼层
回复 2# yu2n
yu2n老师您好!!
        我是新手,是来学习的!!
发表于 2015-1-18 20:29:51 | 显示全部楼层
回复 2# hnldwhm52

这个『有线网络行,无线就不行』问题太广,但是跟VBS有关系么?
你要真觉得是无线网络问题,去把无线网络搞好不就行了。
你要真是来问问题的,把系统、运行环境、怎么操作出错的,给写明白了。
发表于 2015-1-20 21:26:23 | 显示全部楼层
我来改一下,不是因为lz所说的“无线网络不能用”,而是为了win7开启uac时双击能用,另外时区更改了不受影响
  1. call runAsAdmin()
  2. strNewDateTime = convertDateTime(getBaiduTime())
  3. call syncDateTime(strNewDateTime, Now())

  4. Function getBaiduTime()
  5.     Dim strUrl, strText
  6.     strUrl = "http://open.baidu.com/special/time/"
  7.     With CreateObject("MSXML2.XmlHttp")
  8.         .Open "GET", strUrl, False
  9.         .Send()
  10.         strText = .responseText
  11.     End With
  12.     strText = Split(LCase(strText), "window.baidu_time(")(1)
  13.     getBaiduTime = Int(Left(strText, 13)/1000)
  14. End Function

  15. Function convertDateTime(intUnixTime)
  16.     Dim objWMI, colOSes, objOS, tmZone
  17.     Set objWMI = GetObject("winmgmts:\\.\root\cimv2")
  18.     Set colOSes =objWMI.ExecQuery("Select * from Win32_OperatingSystem")
  19.     For Each objOS in colOSes
  20.         tmZone = objOS.CurrentTimeZone
  21.     Next
  22.     intUnixTime = intUnixTime + tmZone * 60
  23.     convertDateTime = DateAdd("s", intUnixTime, "1970-1-1 00:00:00")
  24. End Function

  25. Sub syncDateTime(ByVal strNewDateTime, strOldDateTime)
  26.     Dim ss, objDateTime, dtmNewDateTime
  27.     ss = DateDiff("s", strOldDateTime, strNewDateTime)
  28.     If Abs(ss) < 1 Then
  29.         MsgBox "本机时间非常准确无需校对!"
  30.         Exit Sub
  31.     End If

  32.     Set objDateTime = CreateObject("WbemScripting.SWbemDateTime")
  33.     objDateTime.SetVarDate strNewDateTime, true
  34.     dtmNewDateTime = objDateTime.Value

  35.     Dim objWMI, colOSes, objOS
  36.     Set objWMI = GetObject("winmgmts:{(Systemtime)}\\.\root\cimv2")
  37.     Set colOSes =objWMI.ExecQuery("Select * from Win32_OperatingSystem")
  38.     For Each objOS in colOSes
  39.         objOS.SetDateTime dtmNewDateTime
  40.     Next
  41.     MsgBox "校准前:" & strOldDateTime & vbLf & "校准后:" & Now()
  42. End Sub

  43. Sub runAsAdmin()
  44.     Dim objWMI, colOSes, objOS, strVer
  45.     Set objWMI = GetObject("winmgmts:\\.\root\cimv2")
  46.     Set colOSes =objWMI.ExecQuery("Select * from Win32_OperatingSystem")
  47.     For Each objOS in colOSes
  48.         strVer = Split(objOS.Version, ".")(0)
  49.     Next
  50.     If CInt(strVer) >= 6 Then
  51.         Dim objShell
  52.         Set objShell = CreateObject("Shell.Application")
  53.         If WScript.Arguments.Count = 0 Then
  54.             objShell.ShellExecute "WScript.exe", _
  55.                 """" & WScript.ScriptFullName & """ OK", , "runAs", 1
  56.             Set objShell = Nothing
  57.             WScript.Quit
  58.         End If
  59.     End If
  60. End Sub
复制代码

评分

参与人数 1技术 +1 收起 理由
hnldwhm52 + 1 谢谢apang老师旳热心指教解答!

查看全部评分

发表于 2015-1-21 08:00:35 | 显示全部楼层
本帖最后由 ygqiang 于 2015-1-21 08:37 编辑
我来改一下,不是因为lz所说的“无线网络不能用”,而是为了win7开启uac时双击能用,另外时区更改了不受影响 ...
apang 发表于 2015-1-20 21:26



    而是为了win7开启uac时双击能用???

这个是啥意思?你的vbs代码,与1楼的相比,有啥差别呢?


明白了。多谢。。。
有人说:“win7下,不是所有vbs都可以运行  包括其它一些程序  有些需要权限
call runAsAdmin()    这个就是获取win7下管理员权限的命令

下面有个runAsAdmin()   自定义函数,作用就是获取权限”
 楼主| 发表于 2015-1-21 10:45:26 | 显示全部楼层
我来改一下,不是因为lz所说的“无线网络不能用”,而是为了win7开启uac时双击能用,另外时区更改了不受影响 ...
apang 发表于 2015-1-20 21:26

i
谢谢apang老师旳热心指教解答!
发表于 2015-1-22 20:28:29 | 显示全部楼层
没看懂那个OK是什么意思,如果没有,就会出问题,但如果改成任何其他字符串,都不会出问题。
objShell.ShellExecute "WScript.exe", """" & WScript.ScriptFullName & """ OK", , "runAs", 1
按一些资料的解释,第二个参数应该是WScript.exe的参数,但它需要这个OK参数吗?
发表于 2015-1-22 23:56:23 | 显示全部楼层
回复 7# yiwuyun


    如你所说,OK就是一参数名字,可以用其它字符替代,但它是WScript.exe的参数,WScript.Arguments.Count 就是WScript.exe的参数个数
如果把它当作objShell.ShellExecute 的参数,那它是多余的
发表于 2015-1-23 07:20:28 | 显示全部楼层
本帖最后由 yiwuyun 于 2015-1-23 07:29 编辑

谢谢,想了一晚上,懂了,ok不是要传给ws的,而是要传给vbs的。代码很清晰,写得很好。比楼主的那个代码清晰多了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 01:13 , Processed in 0.017778 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表