2017-10-10 91 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到@aschipft在SET /AYEAR不需要百分號。

+0

是的,它的工作表示感謝。但是當我測試2016年時,跳躍等於0;所以就我所瞭解的代碼而言,這意味着它不是一個閏年,而我們在2017年獲得跳躍= 1,這意味着這是一個閏年。現實情況是,2016年是閏年,2017年不是。我應該將代碼更改爲「IF%LEAP%EQU 0(ECHO是閏年)」嗎? –

+2

我相信這段代碼會爲閏年返回零,並返回一個非零值。無論如何,沒有必要把'%'放在'YEAR'周圍,因爲'set/A'解決了變量,即使沒有... – aschipfl

+0

我已在上一條語句中更正了EQU測試。 – lit

相關問題