askaev
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: рано пока убирать echo - твой код хочет удалить не 15 наиболее старых каталогов архивов, а не оставить 15 наиболее свежих каталогов, прибив все более старые. | Во-во, и я о том же: в данный момент получается, что скрипт удалит все папки,даже ту, что была создана сегодня. Спасибо по поводу разъяснения с %переменными% и !переменными!. Вот накатал такой скрипт: Цитата: @echo off setlocal enabledelayedexpansion SET OLD=5 SET CURDIR=D:\TEST SET CURDATE=%DATE% SET CURDAY=%CURDATE:~0,2% SET CURMONTH=%CURDATE:~3,2% SET CURYEAR=%CURDATE:~6,4% FOR /D %%A IN (*) DO ( SET FOLDER=%%A SET FLRDAY=!FOLDER:~17,2! SET FLRMONTH=!FOLDER:~14,2! SET FLRYEAR=!FOLDER:~9,4! rem IF "%RESULT%" GTR "%OLD%" DELTREE "%CURDIR%\!FOLDER!" SET /A RESDAY=!CURDAY!-!FLRDAY! echo !CURDAY! - !FLRDAY! = !RESDAY! IF "!RESDAY!" GEQ "%OLD%" ( ECHO tak kak !RESDAY! ^>= %OLD% - udalit papku "%CURDIR%\!FOLDER!" ) ELSE ( echo odnako !RESDAY! ^<= %OLD% - papku ostavit "%CURDIR%\!FOLDER!" ) ) | Из имени папки дату вытягивает, и разбивает ее на ДД, ММ и ГГГГ замечательно. Далее я проверяю свежесть по ДД. И вот тут какие-то непонятки с логикой: Если SET OLD= задать от 3 до 9, то логика отрабатывает правильно Если SET OLD= задать от 1 до 2, или от 10 до... то логика тупит и показывает, что 4>=15, 3<=30 , а 5>=30. Вопрос: почему так происходит? Почему неправильно сравнивает числа? Попробовал вместо SET FLRDAY=!FOLDER:~17,2! прописать SET /A FLRDAY=!FOLDER:~17,2! (и то же с CURDAY) - не помогло, + вылезает ошибка: Цитата: Неправильное число. Числовые константы должны быть десятичными (17) шестнадцатеричными (0x11),или восьмеричными (021). |
|