Войти

Показать полную графическую версию : [решено] Помощь в поиске ошибки bat файла для удаления backup по маске.


PunksNotDead_x@twitter
12-03-2016, 17:09
Добрый день, подскажите где ошибка в bat файле. Имеется батник который по запуску удаляет backup с маской *%y%_%m%_%d%*.bak , при наличии бэкапа за сегодняшний день. Работает почему-то с датами с 10 числа месяца, если запустить до 9 числа, то выдает
================================
08.03.2016
================================
Неправильное число. Числовые константы должны быть десятичными (17)
шестнадцатеричными (0x11),или восьмеричными (021).
2016_3_
Непредвиденное появление: 10.

::=====================================================
::=====================================================
@echo off

set dd2 = %date%

echo ================================
echo %date:~0,10%
echo ================================

set /a d=%date:~0,2%
set /a m=%date:~3,2%
set /a y=%date:~6,4%

echo %y%_%m%_%d%

if %m% lss 10 (
set m=0%m%
)

if %d% lss 10 (
set d=0%d%
)

REM set /a d=1

echo %y%_%m%_%d%

if not exist *%y%_%m%_%d%*.bak (
echo CURRENT FILE NOT EXISTS
exit
)
set /a d=%date:~0,2%
set /a m=%date:~3,2%
set /a y=%date:~6,4%

:loop
set /a d-=1

if %d% lss 1 (
set d=31
set /a m-=1

if %m% lss 1 (
set m=12
set /a y-=1
)
)

if %m% lss 10 (
set m=0%m%
)

if %d% lss 10 (
set d=0%d%
)

echo %y%_%m%_%d%

del *%y%_%m%_%d%*.trn -Y
del *%y%_%m%_%d%*.bak -Y

echo ================================
if %d% equ 31 (
set d=30
)

echo %y%_%m%_%d%
del *%y%_%m%_%d%*.trn -Y
del *%y%_%m%_%d%*.bak -Y

echo ================================
if %d% equ 30 (
set d=29
)

echo %y%_%m%_%d%
del *%y%_%m%_%d%*.trn -Y
del *%y%_%m%_%d%*.bak -Y

echo ================================
if %d% equ 29 (
set d=28
)

echo %y%_%m%_%d%
del *%y%_%m%_%d%*.bak -Y
del *%y%_%m%_%d%*.trn -Y

pause

Iska
12-03-2016, 17:43
PunksNotDead_x@twitter, там же ясно указано — командный процессор воспринимает числа, начинающиеся с нуля, как восьмеричные, а восьмеричных чисел «08» и «09» быть не может.

Самый простой вариант — перейти на WSH или PoSH. Сразу отпадут проблемы с вычислением разницы дат.




© OSzone.net 2001-2012