БлогNot. Календарь на год в виде Batch-файла

Календарь на год в виде Batch-файла

Небольшой скрипт на старую добрую календарную тему. А вы видели когда-нибудь календарь на год на языке пакетных bat-файлов? Если нет, то он перед вами. В консоль выводится календарь на год, год берётся из системы (в листинге указано, как вывести для фиксированного года), в таблице месяцев 4 строки и 3 столбца, недели ориентированы по горизонтали, первый день недели - понедельник.

Всё построено, по сути, на командах set /a (вычислить), set /p (сохранить данные) и расширенных возможностях команды echo по "нарезке" строк (%date:~-4,4% - отсечь справа 4 символа от вывода команды).

Под Windows листинг можно скопировать в файл с типом .bat или .cmd и выполнить как обычную программу. Кодировка файла при этом предполагается "совместимая", то есть, однобайтовая русская Windows-1251 ("ANSI" в Блокноте для русифицированных версий Windows).

@echo off

rem Настройка среды
cls
chcp 1251 >nul
setlocal enabledelayedexpansion
 
rem Получить год из системной команды date
set /a y=%date:~-4,4%
rem set y=2021 %==или фиксированный год==%
 
rem Получить длины месяцев
set jan_l=31&set feb_l=28&set mar_l=31&set apr_l=30&set may_l=31&set jun_l=30
set jul_l=31&set aug_l=31&set sep_l=30&set oct_l=31&set nov_l=30&set dec_l=31
 
rem Номер дня для первого дня года
set /a d=(y/4+y)-(y/100-y/400)
 
rem Проверка на високосность и учёт 29 февраля
set /a "op1=y%%4","op2=y%%100","op3=y%%400"
if not "%op1%"=="0" (goto :no_leap)
if not "%op2%"=="0" (goto :leap)
if not "%op3%"=="0" (goto :no_leap)
:leap
 set feb_l=29
 set/a d-=1
:no_leap
 
rem Вычислить день недели первого дня года, 0=Вс,...,6=Сб
set /a d%%=7
rem Скорректировать для начала недели с Пн
if d==0 (d=6) else (set /a d-=1)

rem Сгенерировать начинку календаря
for %%a in (jan feb mar apr may jun jul aug sep oct nov dec) do (
 set %%a=
 set chars_add=0
 for /l %%b in (1,1,!d!) do (set "%%a=!%%a!   "&set /a chars_add+=3)
 for /l %%c in (1,1,!%%a_l!) do (
  if %%c lss 10 (set "%%a=!%%a! %%c ") else (set "%%a=!%%a!%%c ")
  set /a chars_add+=3
 )
 for /l %%d in (!chars_add!,1,124) do set "%%a=!%%a! "
 set /a d=^(d+%%a_l^)%%7
)
 
rem Показать, что вышло
echo.
echo.                                %y%
echo.
echo.       Январь                 Февраль                 Март 
echo. Пн Вт Ср Чт Пт Сб Вс   Пн Вт Ср Чт Пт Сб Вс   Пн Вт Ср Чт Пт Сб Вс 
echo. %jan:~0,20%   %feb:~0,20%   %mar:~0,20%
echo. %jan:~21,20%   %feb:~21,20%   %mar:~21,20%
echo. %jan:~42,20%   %feb:~42,20%   %mar:~42,20%
echo. %jan:~63,20%   %feb:~63,20%   %mar:~63,20%
echo. %jan:~84,20%   %feb:~84,20%   %mar:~84,20%
echo. %jan:~105%   %feb:~105%   %mar:~105%
echo.
echo.       Апрель                   Май                    Июнь
echo. Пн Вт Ср Чт Пт Сб Вс   Пн Вт Ср Чт Пт Сб Вс   Пн Вт Ср Чт Пт Сб Вс 
echo. %apr:~0,20%   %may:~0,20%   %jun:~0,20%
echo. %apr:~21,20%   %may:~21,20%   %jun:~21,20%
echo. %apr:~42,20%   %may:~42,20%   %jun:~42,20%
echo. %apr:~63,20%   %may:~63,20%   %jun:~63,20%
echo. %apr:~84,20%   %may:~84,20%   %jun:~84,20%
echo. %apr:~105%   %may:~105%   %jun:~105%
echo.
echo.        Июль                  Август                 Сентябрь 
echo. Пн Вт Ср Чт Пт Сб Вс   Пн Вт Ср Чт Пт Сб Вс   Пн Вт Ср Чт Пт Сб Вс 
echo. %jul:~0,20%   %aug:~0,20%   %sep:~0,20%
echo. %jul:~21,20%   %aug:~21,20%   %sep:~21,20%
echo. %jul:~42,20%   %aug:~42,20%   %sep:~42,20%
echo. %jul:~63,20%   %aug:~63,20%   %sep:~63,20%
echo. %jul:~84,20%   %aug:~84,20%   %sep:~84,20%
echo. %jul:~105%   %aug:~105%   %sep:~105%
echo.
echo.       Октябрь                 Ноябрь                Декабрь 
echo. Пн Вт Ср Чт Пт Сб Вс   Пн Вт Ср Чт Пт Сб Вс   Пн Вт Ср Чт Пт Сб Вс 
echo. %oct:~0,20%   %nov:~0,20%   %dec:~0,20%
echo. %oct:~21,20%   %nov:~21,20%   %dec:~21,20%
echo. %oct:~42,20%   %nov:~42,20%   %dec:~42,20%
echo. %oct:~63,20%   %nov:~63,20%   %dec:~63,20%
echo. %oct:~84,20%   %nov:~84,20%   %dec:~84,20%
echo. %oct:~105%   %nov:~105%   %dec:~105%
echo.
echo. Нажмите клавишу для выхода...
pause >nul
endlocal
скриншот запуска bat-календаря из-под файл-менеджера (автоматически уменьшено)
скриншот запуска bat-календаря из-под файл-менеджера (автоматически уменьшено)

09.09.2021, 17:02 [390 просмотров]


теги: дата bat

К этой статье пока нет комментариев, Ваш будет первым