Есть много языков, которые могут работать намного лучше, чем пакетные, но это может быть решением.
@echo off
set day=-3
for /f "delims=" %%i in ('reg query "HKLM\Software\Wow6432Node\KasperskyLab\Components\34\1103\1.0.0.0\Statistics\AVState" /v Protection_BasesDate" ^| findstr "2018"') do set "regdate=%%i"
for /f "tokens=1-3" %%a in ("%regdate%") do set "actual=%%c"
:check
echo >"%temp%\%~n0.vbs" s=DateAdd("d",%day%,now) : d=weekday(s)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^& right(100+day(s),2)
for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "result=%%a"
del "%temp%\%~n0.vbs"
set "yyyy=%result:~0,4%"
set "mm=%result:~4,2%"
set "dd=%result:~6,2%"
set "final=%dd%-%mm%-%yyyy%"
echo %final%
if %day% == 1 goto :EOF
if %actual% == %final% (echo Within 3 days!!) else (set /a day+=1 & goto :check)
На самом деле мы получаем дату системы, используя cscript (да, я передаю данные в файл, но вы можете запустить гибрид без временного файла). Затем мы берем даты последних 3 дней и сопоставляем их в формате ключа реестра, если ключ совпадает в течение 3 дней, я просто повторяю Within 3 days!
Существует также оператор if, если счетчик дней = 1, я выхожу из сценария, так как мы не хотим идти в будущее и этот цикл навсегда, если счетчик if мы не остановим это где-то.
Если это работает для вас, вы можете просто удалить строку print %final%
и заменить эту строку:
if %actual% == %final% (echo Within 3 days!!) else (set /a day+=1 & goto :check)
с этой строкой:
if %actual% == %final% (echo "{"product":"Override Antivirus","running":true,"upToDate":true}" > "c:\ProgramData\CentraStage\AEMAgent\antivirus.json") else (set /a day+=1 & goto :check)