Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Помощь в поиске ошибки bat файла для удаления backup по маске. (http://forum.oszone.net/showthread.php?t=312614)

PunksNotDead_x@twitter 12-03-2016 17:09 2615272

Помощь в поиске ошибки bat файла для удаления backup по маске.
 
Добрый день, подскажите где ошибка в bat файле. Имеется батник который по запуску удаляет backup с маской *%y%_%m%_%d%*.bak , при наличии бэкапа за сегодняшний день. Работает почему-то с датами с 10 числа месяца, если запустить до 9 числа, то выдает
Ошибку

================================
08.03.2016
================================
Неправильное число. Числовые константы должны быть десятичными (17)
шестнадцатеричными (0x11),или восьмеричными (021).
2016_3_
Непредвиденное появление: 10.


Сам код bat файла
::=====================================================
::=====================================================
@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 2615279

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

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


Время: 03:43.

Время: 03:43.
© OSzone.net 2001-