Как сделать проверку по дате +1 день при удаление старых файлов?

Есть команда для удаления файлов старше 3-х дней
"FORFILES /p F:\backup\ /s /m *.* /d -3 /c "CMD /c del /Q @FILE""
я просто не понимаю логику, так как программист из меня никакой, так как просто эникейщик, но как сделать, что бы команда удаляла файлы после проверки, что есть свежие файлы, а если нет файлов свежее то скрип не выполнялся?
  • Вопрос задан
  • 372 просмотра
Решения вопроса 2
Bohdan Zadorozhniy вам надо выполнить похожую команду чтоб узнать были ли свежие файлы
FORFILES /p . /s /m *.* /d !"сегодня минус 3 дня"! /c "cmd /c echo @FILE"
IF errorlevel 1 ECHO Skip Purge && GOTO :EOF
...
а для этого вычислить
дату "сегодня минус 3 дня"
- это традиционно делаетеся через какой нибудь получше язык чем cmd
например jscsipt

пример - если помогло - отметьте решением

check.cmd
@echo OFF
REM https://qna.habr.com/q/898855
SETLOCAL ENABLEDELAYEDEXPANSION
SET delta=%1
IF "%delta%"=="" SET delta=-3
FOR /f %%. IN ('cscript.exe /nologo add_days.js !delta!') DO SET CHECK_DATE=%%.
ECHO FORFILES /p . /s /m *.* /d !CHECK_DATE! /c "cmd /c echo @FILE"
FORFILES /p . /s /m *.* /d !CHECK_DATE! /c "cmd /c echo @FILE" 2>NUL 1>NUL
IF errorlevel 1 ECHO Skip Purge && GOTO :EOF
echo Call purge

GOTO :EOF


add_date.js
var days=parseInt(WScript.Arguments.Item(0));

Date.prototype.addDays = function(days) { var date = new Date(this.valueOf()); date.setDate(date.getDate() + days); return date; }

var o = (new Date()).addDays(days);

WScript.Echo((1 + o.getMonth()) + '/' + o.getDate() + '/' + o.getFullYear());
Ответ написан
@Jektion Автор вопроса
Удаляет старый файлы если в папке больше n файлов

@echo off
setlocal enableextensions enabledelayedexpansion

rem ---папка для очистки;
set sFolder=F:\Архив1С\БАЗЫ\БитФинанс\Backups

rem iCount - число полных оставляемых бэкапов
set /a "iCount=14"

rem префикс полного бэкапа
set "Pref=bitFinance_full_"

rem расширение полного бэкапа
set "Ext=.bak"

Set /a N=%iCount%-1

Set File=""
for /f "skip=%N% usebackq delims=" %%i in (`dir /b /a:-d /o:-d /t:w "%sFolder%\%Pref%*%Ext%"`) do (
Set File=%%i
GoTo :Continue
)
:Continue

Set "L=0"
for /f "usebackq delims=" %%i in (`dir /b /a:-d /o:-d /t:w "%sFolder%"`) do (
If !L!==1 del /f /q "%sFolder%\%%i"
If "%%i"=="%File%" Set "L=1"
)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы