[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[ 中级 ]批处理网络校时:将本机时间与北京时间同步

[ 中级 ] 网络校时:将本机时间与北京时间同步

通过下载网页,再从中分离出当前北京时间,最后达到设置本机日期时间与之同步。
实际作用:用于给主板电池漏电等造成系统日期与时间不正常的联网电脑校时。

目的:学习校时需要搜索什么关键字,第三方下载工具的使用,分离出有用信息以及设置日期、时间的方法。

要求:日期、时间均要同步;
   允许使用临时文件;
   可以借助第三方工具,但仅批处理类下载工具;
   可以使用 VBS、JS 等系统中自带的外部工具进行中间处理,当然不能全是 JS 或 VBS;
   方法不限。

提示:下载工具wget.exe使用方法
   wget -N http://www.appinn.com/servertime.php 下载该网页到当前目录,红色的为文件名。
   wget -O "c:\tmp.txt" "http://bbs.bathome.net/"  下载我们论坛首页到 C 盘。
   当然在本论坛和 CN-DOS 联盟论坛等批处理相关论坛上复制过来的代码就不要贴了。
   (其实关键就是找到含有当前北京时间或相关时间的网页了)(我所找到的相关网页将在第二页公布)

评分:代码可读性 1 分;
   首个新方法 12 分,第二个 11 分,依次类推,最少 2 分;
   一人可多种方法,新方法追加 4 分,已经出现过的方法追加 1 分;
   以上评分相对本帖首页有效,第二页开始依代码精彩程度给分,所以大家不要在首页问无关的问题阿。

--------------------------------------补充--------------------------------------
2009-09-18 五 11时
原来没有说明清楚日期要不要同步,加上后变成:同步日期与时间

[ 本帖最后由 wxcute 于 2009-9-18 11:50 编辑 ]
批处理之家论坛官方 QQ 群 :【当前人数/人数上限】【2009-07-08】
群①:43011867(181/200);群②:(暂缺数据);群③:66165582(120/200)。

  1. @echo off&setlocal enabledelayedexpansion&cls
  2. path=%path%;%~dp0.\command\第三方命令行程序
  3. ::==============================================================
  4. for /f "tokens=3 delims= " %%a in ('curl time.nist.gov:13') do (
  5. set "hh=1%%a"
  6. set /a "h=(!hh:~0,3!%%100+8)%%24"
  7. echo !h!!hh:~-6!|time
  8. )
  9. ::==============================================================
  10. :end
  11. echo 按任意键退出&pause>nul
  12. goto:eof
复制代码
说明:
1. 使用 CURL 工具访问 time.nist.gov:13 端口,获得GMT时间
未发现国内有提供DATATIME服务的,遗憾!
2. GMT+8小时=北京时间.
3. 设置计算机时间.
4. END

特点:
速度非常的快,没有延时!

方法二:
  1. @echo off&setlocal enabledelayedexpansion&cls
  2. ::==============================================================
  3. for /f "skip=3 tokens=2*" %%i IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Cache') do set ieTmp=%%j
  4. call:extmpPath %ieTmp% ieTmp
  5. echo IE临时文件目录=%ieTmp%
  6. call start "IEXPLORE.EXE" "http://time.nist.gov:13"
  7. ping /n 10 127.1>nul
  8. for /f "tokens=* delims= " %%i in ('dir /s /b /o-d "%ieTmp%"\*time.nist*') do (
  9. for /f "tokens=3 delims= " %%a in ('type "%%i"') do (
  10. set hh=1%%a
  11. set /a "h=(!hh:~0,3!%%100+8)%%24"
  12. echo !h!!hh:~-6!|time
  13. )
  14. goto end
  15. )
  16. ::==============================================================
  17. :end
  18. echo 按任意键退出&pause>nul
  19. goto:eof
  20. :extmpPath
  21. set %2=%1
  22. goto :eof
复制代码
说明:
1. 使用默认浏览器访问 time.nist.gov:13 端口,获得GMT时间
   然后在IE临时文件目录里搜索"*time.nist*" 名称的文件.
     注意:不一定是 .htm后缀, 遨游的临时文件没有后缀,IE的有.
2. GMT+8小时=北京时间.
3. 设置计算机时间.
4. END
特点:
不需要第三方工具.
速度比第一种方法稍慢.


R: 如果加上校对日期,就会 涉及到1-12个月的大小, 闰年问题,2月份问题.
代码会比较长,.

time.nist.gov 这个网址位于美国,专门提供DataTime服务,使用格林尼治时间(GMT).

我国的 国家授时中心 并不提供DataTime服务不知道这个网址是不是属于国家机构.
该网的时间以flash文件显示. 其他校时网站都类似.
从网页内容来获得日期的思路是对的,但不可能使用简单方法获得,

最简单和迅速的方法就是访问DataTime服务器.

其他校时方法:
1. 对于使用Cookies的网站, 分析Cookies文件, 前提该网站自身的时间准确.
    Cookies文件是.txt文本,其第5,6两行就是服务器时间,FILETIME格式.
2. 抓取HTTP头获得时间, 要使用网络抓包工具.
3. CMD命令telnet 的登陆成功后的退出信息,含有GMT.
   比如 telnet w ww.time.ac.cn 80 的退出信息, 不过我试过无法把退出信息进行保存
   谁有方法获得告诉我,先谢了.

::==============================================================
Re:
第3条已经解决了, 感谢 wxcute  提供的帮助!

::==============================================================
CURL下载: http://bbs.bathome.net/redirect.php?tid=1761&goto=lastpost
telnet.exe 上传
telnet 5.1.2600.3587.rar
MD5 b4792d7fb52ed4210a8bbc51d65957e0
telnet.exe Ver 5.1.2600.3587
MD5 5342c47cc020d32aa2ad145fc00010d1
http://www.rayfile.com/files/f7b1ee5c-a607-11de-8ca5-0014221f469f/

::==============================================================
综合3楼的服务器地址:
  1. @echo off&setlocal enabledelayedexpansion&cls
  2. path=%path%;G:\DOS\command\第三方命令行程序
  3. ::==============================================================
  4. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "settime" /t REG_SZ /d """"%~f0"""" /f
  5. :loop
  6. sc QUERY RpcSs|find /i "RUNNING">nul&&echo 网络已连接||echo 网络未连接&&ping /n 2 127.1>nul&&goto loop
  7. ping /n 2 www.google.com|find /i "Reply from">nul&&echo 网络已连接||echo 网络未连接&&ping /n 2 127.1>nul&&goto loop
  8. pause
  9. set "jan=1"&set "feb=2"&set "mar=3"&set "apr=4"&set "may=5"&set "jun=6"&set "jul=7"&set "aug=8"&set "sept=9"&set "oct=10"&set "nov=11"&set "dec=12"
  10. for /f "tokens=1,2,3,4 delims= " %%a in ('curl -s stdtime.gov.hk:13') do (
  11. echo 网络时间: %%a-!%%b!-%%c %%d
  12. echo %%d|time
  13. echo %%c-!%%b!-%%a|date
  14. )
  15. ::==============================================================
  16. :end
  17. echo 按任意键退出&pause>nul
  18. goto:eof
复制代码


说明:
1.加入自运行注册表项
2.判断联网
3.更改日期与时间

[ 本帖最后由 hfg1977 于 2009-10-15 20:06 编辑 ]
1

评分人数

    • wxcute: 相当精彩,加上校对日期就完美了。 还有为 ...PB + 16

TOP

  1. @echo off
  2. ::检查是否支持curl
  3. (curl --help >nul 2>nul) || (echo;打不开curl.exe,请先下载此文件&goto :eof)
  4. ::取得当前时间并设置
  5. for /f "tokens=4" %%a in ('curl -s stdtime.gov.hk:13') do echo 当前北京时间%%a&time %%a
  6. pause
复制代码
1

评分人数

    • wxcute: 综合了2楼curl与CN-DOS的telnet一帖,不过我 ...PB + 6

TOP

不一定要curl,用nc 也是可以的。
  1. for /f "tokens=6" %%a in ('echo quit^|nc www.time.ac.cn 80^|find "GMT"') do echo %%a
复制代码

TOP

返回列表