Постоянно слетает дата на ПК?

Одной из вариантов может быть что на компьютере могут быть проблемы с батарейкой 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.

Способ через Планировщик заданий (рекомендуемый)

Этот метод запускает скрипт от имени системы сразу при старте, ещё до входа пользователя.

  1. Сохраните bat-файл в надёжное место, например C:\Scripts\sync_time_on_start.bat (создайте папку, если нужно).
  2. Нажмите Win + R, введите taskschd.msc и нажмите Enter.
  3. В правой панели выберите Создать задачу… (не «простую задачу», чтобы получить доступ ко всем настройкам).
  4. На вкладке Общие:
  • Имя: Синхронизация времени при старте
  • Установите флажок Выполнить с наивысшими правами.
  • В поле Настроить для выберите свою версию Windows.
  • Отметьте Скрытая задача (чтобы окно консоли не мелькало на экране входа).
  • В поле При запуске задачи использовать следующую учётную запись пользователя: нажмите Изменить…, введите SYSTEM и нажмите Проверить имена, затем ОК. Это даст максимальные права без запроса пароля.
  • Опционально отметьте Выполнить независимо от регистрации пользователя.
  1. На вкладке Триггеры нажмите Создать…:
  • Начать задачу: При запуске компьютера.
  • Дополнительно можно включить задержку (например, 30 секунд), но наш скрипт и так сам ждёт интернет.
  1. На вкладке Действия нажмите Создать…:
  • Действие: Запуск программы.
  • Программа или сценарий: укажите полный путь к вашему bat-файлу, например C:\Scripts\sync_time_on_start.bat.
  • Рабочая папка: C:\Scripts (или та, где лежит файл).
  1. На вкладке Условия снимите все ограничения питания (чтобы работало и от батареи на ноутбуке).
  2. Нажмите ОК. Система может запросить подтверждение — подтвердите.

Теперь при каждом включении компьютера задача будет запускаться в фоне, ждать интернета и корректировать время.

Альтернатива — папка автозагрузки (проще, но с оговоркой)

Можно просто поместить ярлык bat-файла в папку автозагрузки (shell:startup). Но тогда скрипт потребует подтверждения UAC. Чтобы обойти это без планировщика, придётся создать задачу в Планировщике, которая запускает bat с правами администратора по триггеру входа пользователя. Поэтому рекомендую первый способ.

3. Проверка работы

  • Перезагрузите компьютер.
  • После загрузки откройте Планировщик заданий, найдите свою задачу и посмотрите столбец «Результат последнего запуска». Код 0x0 означает успех.
  • Либо временно добавьте в конец скрипта строку pause, переместите его в папку автозагрузки, перезагрузитесь и вручную закройте окно консоли, чтобы увидеть вывод.

Если время сильно сбито (на несколько лет) и встроенный клиент NTP не может синхронизироваться, скрипт всё равно отработает, но w32tm может выдать ошибку «Слишком большая разница во времени». В таком случае поможет только ручная установка приблизительного времени, после чего синхронизация начнёт работать. Для домашнего использования это редкость, обычно батарейка CMOS садится постепенно, и часы отстают на часы/дни, что w32tm исправляет.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

0

Ваша корзина

Хорека РСК
Обзор конфиденциальности

На этом сайте используются файлы cookie, что позволяет нам обеспечить наилучшее качество обслуживания пользователей. Информация о файлах cookie хранится в вашем браузере и выполняет такие функции, как распознавание вас при возвращении на наш сайт и помощь нашей команде в понимании того, какие разделы сайта вы считаете наиболее интересными и полезными.