2017-10-10 4 views
0

Je veux définir si mon année est bissextile. Je pris le code de @Aacini: Batch file leap year?Opérateur manquant dans une expression

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

mais quand je le lance, il dit qu'il ya un opérateur manquant. Avez-vous une idée de comment je peux le réparer?

+1

Vous définissez l'année quelque part, non? – SomethingDark

+1

Avez-vous activé [expansion différée] (http://ss64.com/nt/delayedexpansion.html)? eh bien, ne consommez pas les opérateurs '!', ou échappez-les au cas où '^!' ... – aschipfl

+0

@SomethingDark oui je le mets au début de mon code et il affiche la bonne date quand je utilisez 'echo% year%' –

Répondre

0

Cela peut être plus facile que cela ne l'est. Les parenthèses peuvent être utilisées dans l'instruction SET /A, mais le module aura lieu avant l'addition ou la soustraction de toute façon.

@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) 

Utilisez ceci en faisant de l'année en question un paramètre du script de commande.

CALL leapyear.bat 2017 

HT à @aschipft sur YEAR ne nécessitant pas de caractères pour cent en SET /A.

+0

Oui, ça fonctionne merci. Mais comme je teste 2016, le saut est égal à 0; Donc, pour autant que je comprenne le code, cela signifie que ce n'est pas une année bissextile alors que nous avons un saut = 1 pour 2017, ce qui signifie que c'est une année bissextile. La réalité est que 2016 est une année bissextile et 2017 ne l'est pas. Dois-je changer le code en «IF% LEAP% EQU 0» (ECHO est l'année bissextile)? –

+2

Je crois que ce code renvoie zéro pour les années bissextiles et une autre valeur non nulle; de toute façon, il n'est pas nécessaire de mettre '%' autour de 'YEAR' car' set/A' résout les variables même sans ... – aschipfl

+0

J'ai corrigé le test EQU dans la dernière instruction. – lit