Календарь на год в виде 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-календаря из-под файл-менеджера (автоматически уменьшено)
09.09.2021, 17:02 [755 просмотров]