※これはコマンドプロンプトアドベントカレンダーの記事ではありません※なんだかシェル芸界隈で流行っているようだったのでBATファイルで参戦
サブルーチン本体
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
: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を設定します。
試してみましょう
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
@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
|
出力
1
2
3
4
5
6
7
|
2000 is LEAP
2012 is LEAP
1100 is NOT LEAP
続行するには何かキーを押してください . . .
|
こんな感じで。