Board logo

标题: [系统相关] [已解决]批处理从互联网同步时间的问题 [打印本页]

作者: thp2008    时间: 2022-10-18 11:27     标题: [已解决]批处理从互联网同步时间的问题

本帖最后由 thp2008 于 2022-10-18 15:25 编辑

我有台虚拟机,因为经常会暂停的原因,再次启用,会导致时间不同步,如果时间相差不大,点自动同步就可以同步时间。但是一旦时间相差较多,比如相差两天了,就自动同步不了时间了。必须手动,设置成当天的日期,和大概差不多的时间,才能进行时间同步。所以,我在想,写个脚本,直接从互联网上获取日期时间,设置一下系统。再进行同步,这样就没有问题了。
我在网上搜了一下,找到以下这个脚本,但是运行出错。
  1. @echo off
  2. title 获取网络时间
  3. cd /d "%tmp%"
  4. (
  5. echo With CreateObject("Microsoft.XMLHTTP"^)
  6. echo .open "GET", "http://time.tianqi.com/", False
  7. echo .send
  8. echo s = Split(.responseText, "var timestamp = "^&""""^)^(1^)
  9. echo s = Split(s,""""^)^(0^)
  10. echo s = left(s,10^)
  11. echo End With
  12. echo WSH.Echo DateAdd("s", s * 1, "1970-1-1 8:00"^)
  13. )>getTime.vbs
  14. for /f "tokens=1*" %%i in ('cscript //nologo gettime.vbs') do date %%i & time %%j
  15. echo 设置完成!
  16. pause
复制代码
出错提示如下:
  1. C:\Users\Web\AppData\Local\Temp\gettime.vbs(4, 1) Microsoft VBScript 运行时错误: 下标越界: '[number: 1]'
复制代码
我搜了一下,可能是因为http://time.tianqi.com/这个网站提供的时间格式跟我的系统不同,但我又不知道该如何调整。
或者,你们有什么更好的方法。VBS\POWERSHELL\BAT都行。只要能实现我的这个需求就行了。感谢。

系统是Windows 10 x64 22H2
作者: fzp070    时间: 2022-10-18 15:01

网上找的,试试看,注我没试过
  1. w32tm /unregister
  2. net stop w32time
  3. w32tm /register
  4. net start w32time
  5. reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\Config" /v MaxNegPhaseCorrection /t reg_dword /d 999999999 /f
  6. reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\Config" /v MaxPosPhaseCorrection /t reg_dword /d 999999999 /f
  7. net stop w32time
  8. net start w32time
  9. w32tm /resync
  10. w32tm /resync
复制代码

作者: thp2008    时间: 2022-10-18 15:13

本帖最后由 thp2008 于 2022-10-18 15:18 编辑
网上找的,试试看,注我没试过
fzp070 发表于 2022-10-18 15:01



   同步很简单,只要这一条就可以了。
  1. w32tm /resync
复制代码
如果同步不成功,就是自动日期的功能没打开。

最主要是如果系统日期超过一天就同步不了。需要先设置正确的日期,才可以同步。

所以,当日期误差超过一天的时候,我就想从互联网上获取正确的日期时间,对系统进行设置,再同步。

不然,我要手工调整日期时间才能再同步。比较麻烦。

我有很多虚拟机,平时,使用完,我没有关机操作,而是暂停,下次再用时,点继续就可以再用了。保存了暂停前的状态,但也造成了一个问题,日期时间也暂停在,我当时点暂停的时间日期。如果超过一天,我就要手工设置正确日期时间。

所以想弄个脚本从网络获取正确日期时间,设置给系统,再进行同步日期时间就可以了。
作者: WHY    时间: 2022-10-18 15:13

Test.bat,ANSI编码,右键以管理员身份运行
  1. @echo off
  2. PowerShell "curl -URI 'http://time.tianqi.com/' | ?{$_.Content -match '北京现在时间:(\d+-\d+-\d+ \d+:\d+:\d+)'} | forEach{Set-Date $matches[1]}"
  3. echo 设置完成!
  4. pause
复制代码

作者: fzp070    时间: 2022-10-18 15:20

回复 3# thp2008


    刚刚亲自试了,将系统时间改为2019年1月1号 1:01分,管理员运行此批处理,可以同步成功,你可以亲自试试。
这个批处理 同步操作的前面一些内容,就是为了超出时间确保同步成功而写的。
作者: thp2008    时间: 2022-10-18 15:21

Test.bat,ANSI编码,右键以管理员身份运行
WHY 发表于 2022-10-18 15:13



    感谢大神,

我试了一下,报错了。

curl : 无法分析响应内容,因为 Internet Explorer 引擎不可用,或者 Internet Explorer 的首次启动配置不完整。请指定 UseBasi
cParsing 参数,然后再试一次。
所在位置 行:1 字符: 1
+ curl -URI 'http://time.tianqi.com/' | ?{$_.Content -match '北京现在时间:(\d ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotImplemented: ( [Invoke-WebRequest], NotSupportedException
    + FullyQualifiedErrorId : WebCmdletIEDomNotSupportedException,Microsoft.PowerShell.Commands.InvokeWebRequestComman
   d
作者: thp2008    时间: 2022-10-18 15:23

可以了,成功了,感谢大神,
可能我的IE从没有使用过,我打开一次,默认设置了一下,就好了。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2