电脑没电会导致时间丢失,为了方便同步时间,写了一个脚本
可以把它放在启动项里,或者用触发器,实现开机自动同步
对于同步时间,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
效果:
同步前
同步后