Командный файл Yesterday.bat
echo off
rem узнать вчерашнее число
setlocal enabledelayedexpansion
rem Работает при условии, что %date% распарсится в виде dd.mm.yyyy
rem Если распарсивается в другом виде, то надо поиграть с разбивкой даты на день, месяц, год
rem Разбивку вообще то можно сделать через for и указать разделитель, тогда можно
rem наплевать на количество цифр в дне/месяце
set dt=%date%
set /A d=%dt:~,2%-1
if !d!==0 (
rem Если надо получить последний день предыдущего месяца
set /A m=%dt:~3,2%-1
set y=%dt:~6%
call :setlastm
) else (
rem Если мы в том же месяце остались после вычитания дня
set /A m=%dt:~3,2%-0
set y=%dt:~6%
)
rem Дописать ноль слева от числа
set /A x=d/10
if !x!==0 set d=0!d!
rem Дописать ноль слева от месяца
set /A x=m/10
if !x!==0 set m=0!m!
rem Выводим на экран полученную дату
set XDAY=%y%-%m%-%d%
echo вчера - %XDAY%
exit
rem Это типа процедура у нас тут
rem Если надо открутить месяц
:setlastm
if !m!==0 (
rem Если надо открутить год
set m=12
set /A y=y-1
)
rem теперь надо получить последний день месяца
if !m!==1 set d=31
if !m!==2 call :setfeb
if !m!==3 set d=31
if !m!==4 set d=30
if !m!==5 set d=31
if !m!==6 set d=30
if !m!==7 set d=31
if !m!==8 set d=31
if !m!==9 set d=30
if !m!==10 set d=31
if !m!==11 set d=30
if !m!==12 set d=31
rem Выход из "процедуры"
exit /b
rem Это типа еще одна процедура
rem С февралем траблы
:setfeb
rem найдем остаток от деления года на 4, чтобы определить високосность года
rem Не рассматриваем случай с високосностью, которая попадает на смену столетия (лениво)
set /A vy=y %% 4
if !vy!==0 (
set d=29
) else (
set d=28
)
rem Выход из "процедуры"
exit /b
|