2017-10-10 13 views
0

私の年がうるう年かどうかを定義します。私は@Aaciniからコードを取っ:Batch file leap year?式内に演算子がありません

set /A "leap=!(year%%4) + (!!(year%%100)-!!(year%%400))" 
if %leap% equ 1 echo Is leap year 

をしかし、私はそれを実行したときに、それが不足している事業者が存在することを言います。 私はそれをどのように修正できるか考えていますか?

+1

あなたはどこかの年を設定していますよね? – SomethingDark

+1

[遅延拡張](http://ss64.com/nt/delayedexpansion.html)を有効にしていますか? '^! 'のような場合には'!'演算子を使うか、エスケープしないでください... – aschipfl

+0

@SomethingDarkはい私はコードの最初に設定しています。 'echo%year%'を使用してください –

答えて

0

これは、作成されるよりも簡単かもしれません。括弧はSET /Aステートメントで使用できますが、モジュラスは加算または減算の前に行われます。

@ECHO OFF 
SET /A YEAR=%1 
SET /A "LEAP=YEAR %% 4 + YEAR %% 100 - YEAR %% 400" 
IF %LEAP% EQU 0 (ECHO %YEAR% is a leap year) 

問題の年をコマンドスクリプトのパラメータにすることでこれを使用します。

CALL leapyear.bat 2017 

HTはSET /AYEAR必要としないパーセント文字を@aschipftします。

+0

はい、ありがたくありがとうございます。しかし、私が2016年をテストするとき、飛躍は0に等しい。だから私はコードを理解する限り、それはうるう年ではないことを意味しますが、それはうるう年を意味する2017年の飛躍= 1を取得することを意味します。現実には、2016年はうるう年、2017年は閏年です。コードを 'IF%LEAP%EQU 0(ECHO isうるう年)'に変更する必要がありますか? –

+2

私はこのコードがうるう年とゼロ以外の値でゼロを返すと信じています。とにかく、 'set/A'が変数を解決しないので、' YEAR'の周りに '%'を置く必要はありません。 – aschipfl

+0

私は最後の文でEQUテストを修正しました。 – lit

関連する問題