Bat-ники: получение предыдущей даты
2010-05-13 от San

Для архивации файлов под Windows понадобилось в CMD-файле определить дату предшествующую текущей. В результате получился следующий скрипт. Корректно обрабатывает смену месяца, года и даже високосный февраль.
[cc escaped=»true»]@echo off
set year=%date:~-4%
set month=%date:~3,2%
set day=%date:~0,2%
rem Remove zero before digit
if «%month:~0,1%.» == «0.» set month=%month:~-1%
if «%day:~0,1%.» == «0.» set day=%day:~-1%
rem Make yeserday date
if not «%day%» == «1» set /a day=%day%-1 & goto yesterdaydone.
if «%month%»== «1» set /a year=%year%-1 & set month=12 & set day=31 & goto yesterdaydone
if «%month%»== «2» set /a month=%month%-1 & set day=31 & goto yesterdaydone
if «%month%»== «3» set /a month=%month%-1 & set day=28 & goto checkvisokos
if «%month%»== «4» set /a month=%month%-1 & set day=31 & goto yesterdaydone
if «%month%»== «5» set /a month=%month%-1 & set day=30 & goto yesterdaydone
if «%month%»== «6» set /a month=%month%-1 & set day=31 & goto yesterdaydone
if «%month%»== «7» set /a month=%month%-1 & set day=30 & goto yesterdaydone
if «%month%»== «8» set /a month=%month%-1 & set day=31 & goto yesterdaydone
if «%month%»== «9» set /a month=%month%-1 & set day=31 & goto yesterdaydone
if «%month%»== «10» set /a month=%month%-1 & set day=30 & goto yesterdaydone
if «%month%»== «11» set /a month=%month%-1 & set day=31 & goto yesterdaydone
if «%month%»== «12» set /a month=%month%-1 & set day=30 & goto yesterdaydone
:checkvisokos
set /a checkleap=%year%%%4
if %checkleap%==0 set day=29
:yesterdaydone
rem Add zero before digit
if %month% LSS 10 set month=0%month%
if %day% LSS 10 set day=0%day%[/cc]
После отработки скрипта в переменных year,month и day будут находиться год, месяц и день предыдущей даты на момент выполнения скрипта.
Опубликовано Четверг, 13-05-2010 в 16:28 в рубрики Компьютеры и сети. Вы можете оставить отслеживать комментарии к записи при помощи RSS 2.0 ленты. Комментарии и пинг запрещены.