私の年がうるう年かどうかを定義します。私は@Aaciniからコードを取っ:Batch file leap year?式内に演算子がありません
set /A "leap=!(year%%4) + (!!(year%%100)-!!(year%%400))"
if %leap% equ 1 echo Is leap year
をしかし、私はそれを実行したときに、それが不足している事業者が存在することを言います。 私はそれをどのように修正できるか考えていますか?
私の年がうるう年かどうかを定義します。私は@Aaciniからコードを取っ:Batch file leap year?式内に演算子がありません
set /A "leap=!(year%%4) + (!!(year%%100)-!!(year%%400))"
if %leap% equ 1 echo Is leap year
をしかし、私はそれを実行したときに、それが不足している事業者が存在することを言います。 私はそれをどのように修正できるか考えていますか?
これは、作成されるよりも簡単かもしれません。括弧は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 /A
約YEAR
必要としないパーセント文字を@aschipftします。
はい、ありがたくありがとうございます。しかし、私が2016年をテストするとき、飛躍は0に等しい。だから私はコードを理解する限り、それはうるう年ではないことを意味しますが、それはうるう年を意味する2017年の飛躍= 1を取得することを意味します。現実には、2016年はうるう年、2017年は閏年です。コードを 'IF%LEAP%EQU 0(ECHO isうるう年)'に変更する必要がありますか? –
私はこのコードがうるう年とゼロ以外の値でゼロを返すと信じています。とにかく、 'set/A'が変数を解決しないので、' YEAR'の周りに '%'を置く必要はありません。 – aschipfl
私は最後の文でEQUテストを修正しました。 – lit
あなたはどこかの年を設定していますよね? – SomethingDark
[遅延拡張](http://ss64.com/nt/delayedexpansion.html)を有効にしていますか? '^! 'のような場合には'!'演算子を使うか、エスケープしないでください... – aschipfl
@SomethingDarkはい私はコードの最初に設定しています。 'echo%year%'を使用してください –