标题: [ 中级 ]批处理网络校时:将本机时间与北京时间同步 [打印本页]
作者: wxcute 时间: 2009-9-17 22:53 标题: [ 中级 ]批处理网络校时:将本机时间与北京时间同步
[ 中级 ] 网络校时:将本机时间与北京时间同步
通过下载网页,再从中分离出当前北京时间,最后达到设置本机日期时间与之同步。
实际作用:用于给主板电池漏电等造成系统日期与时间不正常的联网电脑校时。
目的:学习校时需要搜索什么关键字,第三方下载工具的使用,分离出有用信息以及设置日期、时间的方法。
要求:日期、时间均要同步;
允许使用临时文件;
可以借助第三方工具,但仅批处理类下载工具;
可以使用 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 编辑 ]
作者: hfg1977 时间: 2009-9-18 03:05
- @echo off&setlocal enabledelayedexpansion&cls
- path=%path%;%~dp0.\command\第三方命令行程序
- ::==============================================================
- for /f "tokens=3 delims= " %%a in ('curl time.nist.gov:13') do (
- set "hh=1%%a"
- set /a "h=(!hh:~0,3!%%100+8)%%24"
- echo !h!!hh:~-6!|time
- )
- ::==============================================================
- :end
- echo 按任意键退出&pause>nul
- goto:eof
复制代码
说明:
1. 使用 CURL 工具访问 time.nist.gov:13 端口,获得GMT时间
未发现国内有提供DATATIME服务的,遗憾!
2. GMT+8小时=北京时间.
3. 设置计算机时间.
4. END
特点:
速度非常的快,没有延时!
方法二:- @echo off&setlocal enabledelayedexpansion&cls
- ::==============================================================
- for /f "skip=3 tokens=2*" %%i IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Cache') do set ieTmp=%%j
- call:extmpPath %ieTmp% ieTmp
- echo IE临时文件目录=%ieTmp%
- call start "IEXPLORE.EXE" "http://time.nist.gov:13"
- ping /n 10 127.1>nul
- for /f "tokens=* delims= " %%i in ('dir /s /b /o-d "%ieTmp%"\*time.nist*') do (
- for /f "tokens=3 delims= " %%a in ('type "%%i"') do (
- set hh=1%%a
- set /a "h=(!hh:~0,3!%%100+8)%%24"
- echo !h!!hh:~-6!|time
- )
- goto end
- )
- ::==============================================================
- :end
- echo 按任意键退出&pause>nul
- goto:eof
- :extmpPath
- set %2=%1
- 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楼的服务器地址:
- @echo off&setlocal enabledelayedexpansion&cls
- path=%path%;G:\DOS\command\第三方命令行程序
- ::==============================================================
- reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "settime" /t REG_SZ /d """"%~f0"""" /f
- :loop
- sc QUERY RpcSs|find /i "RUNNING">nul&&echo 网络已连接||echo 网络未连接&&ping /n 2 127.1>nul&&goto loop
- ping /n 2 www.google.com|find /i "Reply from">nul&&echo 网络已连接||echo 网络未连接&&ping /n 2 127.1>nul&&goto loop
- pause
- 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"
- for /f "tokens=1,2,3,4 delims= " %%a in ('curl -s stdtime.gov.hk:13') do (
- echo 网络时间: %%a-!%%b!-%%c %%d
- echo %%d|time
- echo %%c-!%%b!-%%a|date
- )
- ::==============================================================
- :end
- echo 按任意键退出&pause>nul
- goto:eof
复制代码
说明:
1.加入自运行注册表项
2.判断联网
3.更改日期与时间
[ 本帖最后由 hfg1977 于 2009-10-15 20:06 编辑 ]
作者: inittab 时间: 2009-9-19 08:29
- @echo off
- ::检查是否支持curl
- (curl --help >nul 2>nul) || (echo;打不开curl.exe,请先下载此文件&goto :eof)
-
- ::取得当前时间并设置
- for /f "tokens=4" %%a in ('curl -s stdtime.gov.hk:13') do echo 当前北京时间%%a&time %%a
- pause
复制代码
作者: caruko 时间: 2010-12-31 18:09
不一定要curl,用nc 也是可以的。- for /f "tokens=6" %%a in ('echo quit^|nc www.time.ac.cn 80^|find "GMT"') do echo %%a
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |