Одной из вариантов может быть что на компьютере могут быть проблемы с батарейкой bios и что бы убрать проблему стоит заменить батарейку CR2032 но если пока нет возможности заменить Автосинхронизация даты и времени на ПК поможет временно решить проблему. Ниже готовый bat-скрипт, который при старте системы дожидается появления интернета и принудительно синхронизирует системное время. Там же инструкция, как добавить его в автозапуск.
1. Код bat-файла
Создайте текстовый файл, например sync_time_on_start.bat, и вставьте в него:
@chcp 1251 >nul
@echo off
setlocal enabledelayedexpansion
:: === НАСТРОЙКИ ===
set "PING_TARGET=8.8.8.8"
set "MAX_RETRIES=60"
set "RETRY_DELAY=5"
:: =================
echo Ожидание подключения к интернету...
set /a attempt=0
:check_net
ping -n 1 %PING_TARGET% >nul 2>&1
if %errorlevel% equ 0 (
echo Сеть доступна. Запуск синхронизации времени...
goto sync_time
)
set /a attempt+=1
if !attempt! geq %MAX_RETRIES% (
echo Таймаут ожидания сети. Синхронизация не выполнена.
exit /b 1
)
echo Попытка !attempt! из %MAX_RETRIES%. Жду %RETRY_DELAY% сек...
timeout /t %RETRY_DELAY% /nobreak >nul
goto check_net
:sync_time
:: Останавливаем и запускаем службу времени для надёжности
net stop w32time >nul 2>&1
net start w32time >nul 2>&1
:: Принудительная синхронизация
w32tm /resync /force
if %errorlevel% equ 0 (
echo Время успешно синхронизировано.
) else (
echo Ошибка синхронизации. Код: %errorlevel%
exit /b %errorlevel%
)
exit /b 0Что делает скрипт:
- Пингует
8.8.8.8(можно заменить наgoogle.comили любой другой надёжный адрес). - Если интернета нет, повторяет проверку до 60 раз с паузой 5 секунд (в сумме до 5 минут ожидания). Это нужно, потому что при старте системы сетевая карта и DHCP могут ещё не успеть инициализироваться.
- Как только связь появилась, перезапускает службу времени Windows и выполняет
w32tm /resync /force. - Выводит результат в консоль (если запускать из автозагрузки, окно промелькнёт — можно убрать
echoиpauseпри желании).
2. Как добавить скрипт в автозагрузку
Важно: Команда w32tm /resync требует прав администратора. Обычный ярлык в папке автозагрузки вызовет запрос UAC, что неудобно для полностью автоматического запуска. Поэтому лучший способ — Планировщик заданий Windows.
Способ через Планировщик заданий (рекомендуемый)
Этот метод запускает скрипт от имени системы сразу при старте, ещё до входа пользователя.
- Сохраните bat-файл в надёжное место, например
C:\Scripts\sync_time_on_start.bat(создайте папку, если нужно). - Нажмите
Win + R, введитеtaskschd.mscи нажмите Enter. - В правой панели выберите Создать задачу… (не «простую задачу», чтобы получить доступ ко всем настройкам).
- На вкладке Общие:
- Имя:
Синхронизация времени при старте - Установите флажок Выполнить с наивысшими правами.
- В поле Настроить для выберите свою версию Windows.
- Отметьте Скрытая задача (чтобы окно консоли не мелькало на экране входа).
- В поле При запуске задачи использовать следующую учётную запись пользователя: нажмите Изменить…, введите
SYSTEMи нажмите Проверить имена, затем ОК. Это даст максимальные права без запроса пароля. - Опционально отметьте Выполнить независимо от регистрации пользователя.
- На вкладке Триггеры нажмите Создать…:
- Начать задачу: При запуске компьютера.
- Дополнительно можно включить задержку (например, 30 секунд), но наш скрипт и так сам ждёт интернет.
- На вкладке Действия нажмите Создать…:
- Действие: Запуск программы.
- Программа или сценарий: укажите полный путь к вашему bat-файлу, например
C:\Scripts\sync_time_on_start.bat. - Рабочая папка:
C:\Scripts(или та, где лежит файл).
- На вкладке Условия снимите все ограничения питания (чтобы работало и от батареи на ноутбуке).
- Нажмите ОК. Система может запросить подтверждение — подтвердите.
Теперь при каждом включении компьютера задача будет запускаться в фоне, ждать интернета и корректировать время.
Альтернатива — папка автозагрузки (проще, но с оговоркой)
Можно просто поместить ярлык bat-файла в папку автозагрузки (shell:startup). Но тогда скрипт потребует подтверждения UAC. Чтобы обойти это без планировщика, придётся создать задачу в Планировщике, которая запускает bat с правами администратора по триггеру входа пользователя. Поэтому рекомендую первый способ.
3. Проверка работы
- Перезагрузите компьютер.
- После загрузки откройте Планировщик заданий, найдите свою задачу и посмотрите столбец «Результат последнего запуска». Код
0x0означает успех. - Либо временно добавьте в конец скрипта строку
pause, переместите его в папку автозагрузки, перезагрузитесь и вручную закройте окно консоли, чтобы увидеть вывод.
Если время сильно сбито (на несколько лет) и встроенный клиент NTP не может синхронизироваться, скрипт всё равно отработает, но w32tm может выдать ошибку «Слишком большая разница во времени». В таком случае поможет только ручная установка приблизительного времени, после чего синхронизация начнёт работать. Для домашнего использования это редкость, обычно батарейка CMOS садится постепенно, и часы отстают на часы/дни, что w32tm исправляет.