くんすとの備忘録

IT系技術メモ

移転しました。

15秒後に自動的にリダイレクトします。

BATファイルのサブルーチンで閏年を判定する

※これはコマンドプロンプトアドベントカレンダーの記事ではありません

※なんだかシェル芸界隈で流行っているようだったのでBATファイルで参戦

サブルーチン本体

:IS_LEAP
	rem 年が400で割り切れると閏年
	set /a rest = %1 %% 400
	if %rest%==0 exit /b 0

	rem 年が100で割り切れると閏年ではない
	set /a rest = %1 %% 100
	if %rest%==0 exit /b 1

	rem 年が4で割りきれると閏年
	set /a rest = %1 %% 4
	if %rest%==0 exit /b 0
exit /b 1

閏年の場合、ERRORLEVELに0を、そうでない場合は1を設定します。

試してみましょう

@echo off

set YEAR=2000
call :IS_LEAP %YEAR%
if errorlevel 1 (echo %YEAR% is NOT LEAP) else (echo %YEAR% is LEAP)
echo.


set YEAR=2012
call :IS_LEAP %YEAR%
if errorlevel 1 (echo %YEAR% is NOT LEAP) else (echo %YEAR% is LEAP)
echo.


set YEAR=1100
call :IS_LEAP %YEAR%
if errorlevel 1 (echo %YEAR% is NOT LEAP) else (echo %YEAR% is LEAP)
echo.


pause

goto :eof

:IS_LEAP
	rem 年が400で割り切れると閏年
	set /a rest = %1 %% 400
	if %rest%==0 exit /b 0

	rem 年が100で割り切れると閏年ではない
	set /a rest = %1 %% 100
	if %rest%==0 exit /b 1

	rem 年が4で割りきれると閏年
	set /a rest = %1 %% 4
	if %rest%==0 exit /b 0
exit /b 1

出力

2000 is LEAP

2012 is LEAP

1100 is NOT LEAP

続行するには何かキーを押してください . . .


こんな感じで。