Résolu Explication d'un batch

Solutions (3)
Tags :
  • Batch
  • format
  • Programmation
|
Bonjour à toutes et tous,
Je dispose d'un .bat, qui calcul le numéro du jour de l'année.
Je ne suis pas sûr que le bat soit le langage le plus approprié, étant donné que d'autres incluent des macros de références permettant de savoir le jour.
En .bat, il faut faire tout un calcul.

Bref, j'ai ce .bat, qui n'a pas été crée par moi, mais il n'était absolument pas commenté.
J'ai donc essayé d'y voir plus clair et de comprendre son fonctionnement.

Je l'ai commenté, mais j'aurais voulu avoir confirmation si j'avais bien interprété le fonctionnement.

Je vous met mes commentaires en couleur pour plus de lisibilité.

  1. @echo off
  2. IF %1.==. (set d=%date%) ELSE (set d=%1)
  3. //rem On affecte à la variable d la date sous format JJ/MM/AAAA
  4. Set j=%d:~0,2%
  5. //rem On affecte à la variable j les deux premiers caractères de la variable d, donc de la date
  6. set i=%j:~0,1%
  7. //rem On affecte à la variable i le premier caractère de la variable j donc le numéro du jour
  8. if %i% EQU 0 set j=%j:~1%
  9. //rem si i=0 alors le jour est de type 02 ou 05 alors j est égal au deuxième chiffre
  10. Set m=%d:~3,2%
  11. //rem On affecte à la variable m, les 2 caracrères qui suivent le 3ème caractère donc MM
  12. set i=%m:~0,1%
  13. //rem On affecte à la variable i, le premier caractère de la variable m
  14. if %i% EQU 0 set m=%m:~1%
  15. //rem Si i=0 alors le mois est de type 02 ou 05, et on affecte à m le deuxième chiffre
  16. Set a=%d:~6,4%
  17. //rem On affecte à la variable a les 4 caraéctères à partir du sixième caractère donc AAAA
  18. Set /A mod=a %% 4
  19. //rem On affect à la variable mod le résultat de a/4, soit l'année divisée par 4
  20. Set fev=28
  21. //rem On affecte à la variable fev le nombre 28
  22. if %mod% EQU 0 set /A fev=29
  23. //rem Si la variabe mod = 0, donc le résultat de l'année divisée par 4 = 0, nous sommes donc en présence d'une année bissextile car les années bissextiles sont divisibles par 4, le mois de février a donc 29 jours
  24. Set jour_annee=%j%
  25. if %m% GTR 1 set /A jour_annee=%jour_annee% + 31
  26. //rem Si m donc le mois est supérieur à 1, alors à la variable jour année est ajouté 31
  27. if %m% GTR 2 set /A jour_annee=%jour_annee% + fev
  28. if %m% GTR 3 set /A jour_annee=%jour_annee% + 31
  29. if %m% GTR 4 set /A jour_annee=%jour_annee% + 30
  30. if %m% GTR 5 set /A jour_annee=%jour_annee% + 31
  31. if %m% GTR 6 set /A jour_annee=%jour_annee% + 30
  32. if %m% GTR 7 set /A jour_annee=%jour_annee% + 31
  33. if %m% GTR 8 set /A jour_annee=%jour_annee% + 31
  34. if %m% GTR 9 set /A jour_annee=%jour_annee% + 30
  35. if %m% GTR 10 set /A jour_annee=%jour_annee% + 31
  36. if %m% GTR 11 set /A jour_annee=%jour_annee% + 30
  37. if %m% GTR 12 set /A jour_annee=%jour_annee% + 31
  38. @echo Le %d% est le jour %jour_annee%



Edit OmaR: j'ai mis une balise code, et pour mettre les commentaires en couleur, je les ai précédés de //
Contenus similaires
Meilleure solution
partage
|
Ca me semble plutôt bien, excepté le :

  1. Set /A mod=a %% 4
  2. //rem On affect à la variable mod le résultat de a/4, soit l'année divisée par 4


Ce n'est pas le résultat de a/4, mais le reste de la division par 4 de la variable a... c-à-d "a modulo 4"
  • Commenter cette solution |
Score
0
òh
òi
|
Meilleure réponse sélectionnée par ledge.
  • Commenter cette réponse |
Score
0
òh
òi
|
Merci pour ta réponse yoye34 !
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS