一键同步时间脚本


电脑没电会导致时间丢失,为了方便同步时间,写了一个脚本

可以把它放在启动项里,或者用触发器,实现开机自动同步

对于同步时间,Windows有一个限制,默认的最大时间差是15小时,所以需要在注册表里修改2个值。

如果不修改注册表,可能会有如下提示:

此计算机没有重新同步,因为要求的时间更改太大。

路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config
注册表项:

MaxNegPhaseCorrection 改为 0xFFFFFFFF(尽可能大)

MaxPosPhaseCorrection 改为 0xFFFFFFFF(尽可能大)

MaxNegPhaseCorrection这个代表慢于NTP服务器的时间,如果本地时间超过NTP服务器MaxNegPhaseCorrection秒,就不同步
MaxPosPhaseCorrection这个代表快于NTP服务器的时间,如果本地时间超过NTP服务器MaxPosPhaseCorrection秒,就不同步

用如下两个命令修改注册表项:

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\Config" /v MaxNegPhaseCorrection /t reg_dword /d 999999999 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\Config" /v MaxPosPhaseCorrection /t reg_dword /d 999999999 /f

修改注册表

reg add "路径" /v 变量 /t 数据类型 /d 数值 /f

/v 设置键名(value)
/t 设置数据类型(type)
/d 设置添加的值(data)
/f 表示强制(forbidden)

重置时间服务的注册表参数

w32tm /unregister 取消时间服务的注册
net stop w32time 停止时间服务

在注册表注册时间服务

w32tm /register

开启时间服务

net start w32time

同步时间命令

w32tm /resync

有时候一次不能成功,提示没有可用数据,可以再加一条语句确保成功率

经过多次测试,以下代码的语句缺一不可。

粘贴到bat可以直接运行:

(可能需要用管理员权限打开)

w32tm /unregister
net stop w32time
w32tm /register
net start w32time
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\Config" /v MaxNegPhaseCorrection /t reg_dword /d 999999999 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\Config" /v MaxPosPhaseCorrection /t reg_dword /d 999999999 /f
net stop w32time
net start w32time
w32tm /resync
w32tm /resync

效果:

同步前

同步后


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM