powershell -Command "(Get-Content '%~f0') -join \"`r`n\" | Set-Content '%~f0'"
more +3 "%~f0" > "sync_tmp.txt"
move /y "sync_tmp.txt" "%~f0" && del sync_tmp.txt && exit
title Sync is starting
echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

:1
cls
title Зеркальный синхронизатор
set "times=0"
set "source="
set "dest="
set "timer=5"
set "tt=0"

net session >nul 2>&1
if !errorlevel! neq 0 (
    choice /c 12 /n /m "Запустить от имени администратора? (1 - да, 2 - нет):"
    if !errorlevel! equ 1 (
        powershell -Command "Start-Process 'cmd.exe' -ArgumentList '/c \"\"%~f0\" admin\"' -Verb RunAs" && exit
    )
)
cls
echo публичная бета - обратная связь thewho.narod@mail.ru
echo.
echo Программа в запущенном состоянии синхронизирует папки
echo в зеркальном режиме, и в целевой папке будут удалены файлы,
echo отсутствующие в исходной папке.
echo.

:get_src
set /p source="Введите исходную папку: "
set "source=!source:"=!"

:chk_src_empty
if "!source!"=="" (
    echo Исходная папка не введена.
    goto get_src
)

:chk_src_exist
if not exist "!source!" (  
    echo Исходная папка "!source!" не найдена.
    set "source="
    goto get_src
)

echo.
:get_dest
set /p dest="Введите целевую папку: "
set "dest=!dest:"=!"

:chk_dest_empty
if "!dest!"=="" (  
    echo Целевая папка не введена.
    goto get_dest
)

:chk_dest_exist
if not exist "!dest!" (  
    echo Целевая папка "!dest!" не найдена.
    set "dest="
    goto get_dest
)

cls
echo.
echo Исходная папка: "!source!"
echo Целевая папка:  "!dest!"
echo.
set /p timer="Интервал передачи в секундах (по умолчанию 5): "
if "!timer!"=="" set "timer=5"

echo Оставить пустым, чтобы копировать бесконечно
set /p tt="Проходов копирования: "
if "!tt!"=="" set "tt=0"

cls
echo.
echo Исходная папка: "!source!"
echo Целевая папка:  "!dest!"
echo Интервал передачи: !timer! сек.
if !tt! neq 0 (
    echo Проходов копирования: !tt!
) else (
    echo Проходов копирования: бесконечно
)
echo.

choice /c 123 /n /m "Начать? (1 - да, 2 - нет, 3 - включить логирование): "
set "choice_val=!errorlevel!"

if !choice_val! equ 2 (
    echo Операция отменена.
    pause
    goto 1
)
set "logging=0"
if !choice_val! equ 3 set "logging=1"

:sync
set /a tt1=!tt!
if !tt! equ 0 set /a tt1=999999 :: Заглушка для бесконечного цикла

if !times! lss !tt1! (
    title Синхронизация... Проход !times! из !tt!
    
    if !logging! equ 1 (
        robocopy "!source!" "!dest!" /mir /e /w:1 /r:1 /log:sync_log.txt
    ) else (
        robocopy "!source!" "!dest!" /mir /e /w:1 /r:1
    )
    
    set /a times=!times! + 1
    
    if !tt! neq 0 (
        if !times! geq !tt! (
            goto end_sync
        )
    )

    :: Таймер обратного отсчета
    FOR /L %%i IN (0,1,!timer!) DO (
        set /a remain=!timer! - %%i
        title Синхронизация. Осталось !remain! сек. !times!-й проход.
        cls
        echo Прошло %%i сек.
        echo До следующей синхронизации !remain! сек.
        if !logging! equ 1 echo Логирование активно в sync_log.txt
        timeout /t 1 /nobreak >nul
    )
    goto sync
)

:end_sync
cls
title Синхронизация выполнена
echo Выполнено !times! проходов. Синхронизация завершена.
echo Для перезапуска программы нажмите любую клавишу.
pause >nul
goto 1