@echo off chcp 65001 setlocal enabledelayedexpansion echo Запуск универсальной синхронизации FreeFileSync... echo. :: --- НАСТРОЙКИ --- set "FFS_PATH=C:\Program Files\FreeFileSync\FreeFileSync.exe" set "Z_SENDER=C:\Program Files\Zabbix Agent\zabbix_sender.exe" set "Z_SERVER=192.168.14.7" :: --- ЛОГИКА ИМЕНИ ХОСТА --- set "Z_HOSTNAME={{ inventory_hostname }}" :: TLS параметры (убедись, что кавычки внутри кавычек не ломают строку) set Z_TLS=--tls-connect psk --tls-psk-identity "%Z_HOSTNAME%" --tls-psk-file "C:\Program Files\Zabbix Agent\psk.key" :: Путь к логам set "LOG_DIR=%~dp0Logs" if not exist "%LOG_DIR%" mkdir "%LOG_DIR%" :: 1. СБОР СПИСКА ФАЙЛОВ И ОТПРАВКА DISCOVERY echo Поиск файлов .ffs_batch в %~dp0... set "JSON={\"data\":[" set "first=1" :: Собираем JSON для Zabbix for %%F in ("%~dp0*.ffs_batch") do ( if !first! == 0 (set "JSON=!JSON!,") set "JSON=!JSON!{\"{#FFS_NAME}\":\"%%~nF\"}" set "first=0" ) set "JSON=!JSON!]}" if !first! == 1 ( echo [%date% %time%] Ошибка: Файлы .ffs_batch не найдены! >> "%LOG_DIR%\sync_errors.log" exit /b 1 ) echo Отправка списка задач в Zabbix для автообнаружения... "%Z_SENDER%" %Z_TLS% -z %Z_SERVER% -s "%Z_HOSTNAME%" -k ffs.discovery -o "%JSON%" echo Ожидание синхронизации Zabbix (30 сек)... timeout /t 30 /nobreak >nul :: 2. ОСНОВНОЙ ЦИКЛ ЗАПУСКА :: Используем поиск файлов напрямую в цикле, чтобы избежать проблем с переменной FOUND_TASKS for %%F in ("%~dp0*.ffs_batch") do ( set "T=%%~nF" echo ------------------------------------------- echo Запуск задачи: !T!... :: Запуск FreeFileSync "%FFS_PATH%" "%%F" :: Сохраняем код возврата set "RET_CODE=!errorlevel!" echo Задача !T! завершена с кодом !RET_CODE!. Отправка в Zabbix... :: Отправка в Zabbix "%Z_SENDER%" %Z_TLS% -z %Z_SERVER% -s "%Z_HOSTNAME%" -k ffs.status[!T!] -o !RET_CODE! -vv :: Безопасное логирование без использования ELSE внутри скобок цикла echo [%date% %time%] !T! завершен с кодом !RET_CODE! >> "%LOG_DIR%\sync_log.txt" if !RET_CODE! NEQ 0 ( echo [%date% %time%] !T! ошибка !RET_CODE! >> "%LOG_DIR%\sync_errors.log" ) ) echo. echo Все найденные задачи выполнены. pause