2017-10-10 122 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