[Batch] Une condition qui n'est pas vérifiée

Une condition qui n'est pas vérifiée [Batch] - Shell/Batch - Programmation

Marsh Posté le 09-06-2010 à 17:33:21    

Bonjour à tous,  :hello:  
 
J'ai un souci avec un script DOS dont je n'arrive pas à éclaircir le mystère, mais je vous explique d'abord mon script.  :jap:  
Mon script copie des fichiers logs du jour (ou de la veille le cas échéant) et m'envoie leur contenu dans un mail.
 
1 - Le fichier crée un DossierA
2 - Le script vérifie si il existe des fichiers crées aujourd'hui dans un DossierB
      2.1 - Si oui, il va a 7
      2.2 - Si non, il va a 3 pour changer la date
 
3 - Les fichiers n'ont pas été copié donc je vais changer la date du jour avec la date d'hier pour copier les fichiers de la veille
      3.1 - Si aujourd'hui on est le 1er tu vas changer le mois (il va a 4)
      3.2 - Si aujourd'hui on est pas le 1er tu va a 5 pour changer le jour
 
4 - On va vérifier le mois
      4.1 - Si le mois est pair alors le jour de la veille est 31
      4.2 - Si le mois est impair alors le jour de la veille est 30
      4.3 - Si le mois est Février alors le jour de la veille est 28
      4.4 - En plus d'un des 3 trois cas précédents, on change le numéro du mois avec le numéro du mois d'avant.
 
5 - Je change le numéro du jour par celui de la veille
 
6 - Maintenant qu'on a mis changé la date d'aujourd'hui par celle de la veille on ré-essaye de copier les fichiers de la veille.
 
7 - J'écris le contenu de tous les fichiers récupérés dans un fichier texte que je copie dans un DossierC
 
8 - J'envoie le fichier texte final par mail.
 
Voila pour le déroulement, voici maintenant le code :
 

Code :
  1. ECHO ON
  2. cd \
  3. mkdir c:\DossierA
  4. for /f "tokens=1-3 delims=/ " %%a in ('date/t') do set MM=%DATE:~4,2%
  5. for /f "tokens=1-3 delims=/ " %%a in ('date/t') do set DD=%DATE:~7,2%
  6. for /f "tokens=1-3 delims=/ " %%a in ('date/t') do set YY=%DATE:~10,4%
  7. xcopy C:\DossierB\*.* C:\DossierA\ /D:%MM%/%DD%/%YY%
  8. IF exist c:\DossierA\*.log GOTO suite
  9. IF not exist c:\DossierA\*.log GOTO dateavant
  10. :dateavant
  11. if %DD%==01 GOTO moisavant
  12. if %DD% NEQ 01 GOTO continue
  13. :moisavant
  14. if %MM%%2==0 set /a DD=30
  15. if %MM%%2 NEQ 0 set /a DD=31
  16. if %MM%==02 set /a DD=28
  17. set /a MM=%MM%-1
  18. :continue
  19. set /a DD=%DD%-1
  20. xcopy C:\DossierB\*.* c:\DossierA\ /D:%MM%/%DD%/%YY%
  21. :suite
  22. cd \
  23. cd c:\DossierA
  24. type *.log > %DD%-%MM%-%YY%.txt
  25. xcopy %DD%-%MM%-%YY%.txt c:\DossierFinal\
  26. cd \
  27. cd c:\DossierA
  28. del /Q *.*
  29. cd \
  30. rmdir DossierA
  31. cd \
  32. //Et j'envoie par mail


 
Le soucis est que pour la première condition :
 
IF exist c:\DossierA\*.log GOTO suite
IF not exist c:\DOssierA\*.log GOTO dateavant
 
Il ne la vérifie pas ! et change la date n'importe comment !
 
Donc selon vous, qu'est-ce qui cloche?   :??:


---------------
Hypershade's Gallery
Reply

Marsh Posté le 09-06-2010 à 17:33:21   

Reply

Marsh Posté le 14-06-2010 à 09:34:19    

up :)


---------------
Hypershade's Gallery
Reply

Marsh Posté le 15-06-2010 à 13:18:17    

Peux-tu nous mettre la trace d'exécution du script.
 
Juste un petit détail, pour la détermination de DD, MM et YY il est inutile d'utiliser for, les commandes set sont suffisantes.
Il faut bien s'assurer du format de la valeur de DATE.
Sur mon PC, elle est au format 'jj/mm/aaa' ce qui donne :

@ECHO OFF
set DD=%DATE:~0,2%
set MM=%DATE:~3,2%
set YY=%DATE:~6,4%
echo DATE = [%DATE%] = [%DD%]/[%MM%]/[%YY%]

Résultat

DATE = [15/06/2010] = [15]/[06]/[2010]


 
Jean-Pierre.

Reply

Marsh Posté le 15-06-2010 à 17:25:30    

Le système est en anglais
 
En fait j'ai supprimé un IF et ca marche bien. Pas besoin de 2 IF en fait, j'en met 1 si il respecte la condition il suit le IF sinon il poursuit le code :)
 
Merci quand même :jap:


---------------
Hypershade's Gallery
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed