[Batch DOS] Test de 2 variables - [RESOLU]

Test de 2 variables - [RESOLU] [Batch DOS] - Shell/Batch - Programmation

Marsh Posté le 27-12-2004 à 15:27:13    

Bonjour à tous et à toutes,  
 
J'ai un soucis lors de l'execution d'un batch DOS.  
Voilà le contexte: j'ai un fichier en entrée (fic_tmp_2.tmp) qui possède X lignes et je recherche les doublons.  
Pour cela j'ai écrit le programme suivant:  
 

Code :
  1. @echo off
  2. set prec_=""
  3. for /F %%A in (fic_tmp_2.tmp) do (
  4.    set actu_=%%A
  5.    if "%actu_%"=="%prec_%" call doublons.bat
  6.    set prec_=%%A
  7. )
  8. pause


Le batch doublons ne fait qu'écrire la ligne en cours dans un autre fichier.  
 
Mon problème est que le programme ne fait jamais appel au doublons.bat alors que plusieurs doublons sont présents et que les variables actu_ et prec_ sont identiques.
Le test 'if' ne semble pas fonctionner...
 
le format des chaines en entrée est:  
 
$$$_##_$$$##_########.xml--##/##/####  
 
ou $ sont des lettres et # des chiffres.  
J'ai essayé avec des chaines toutes simples comme "AA"... ca ne change rien...  
 
Merci d'avance si vous voyez ce qui cloche ou si vous voulez des précisions.  :)


Message édité par ZephIIr le 28-12-2004 à 10:36:08
Reply

Marsh Posté le 27-12-2004 à 15:27:13   

Reply

Marsh Posté le 27-12-2004 à 17:07:47    

ZephIIr a écrit :


@echo off  
set prec_=""
for /F %%A in (fic_tmp_2.tmp) do (  
   set actu_=%%A  
   if "%actu_%"=="%prec_%" call doublons.bat  
   set prec_=%%A
)  
pause  


 
Sans la "prise en charge de l'expansion retardée de variables d'environnement" comme le dit l'aide de set, tu n'as pas le droit de faire ça.
Si tu veux que ton batch fonctionne comme tu le veux, il faut que tu lances ton cmd.exe avec l'option

Code :
  1. /V:ON

et que tu utilises !VAR! a la place de %VAR%.
 

Code :
  1. @echo off
  2. set VAR=avant
  3. if "%VAR%"=="avant" (
  4.   echo "1ere egalite OK"
  5.   set VAR=apres
  6.   echo %VAR%
  7.   echo !VAR!
  8. )


 
Ce qui donne par defaut:

Code :
  1. "1ere egalite OK"
  2. avant
  3. !VAR!


 
et avec

Code :
  1. cmd /V:ON


Code :
  1. "1ere egalite OK"
  2. avant
  3. apres


Message édité par physis le 27-12-2004 à 17:10:58
Reply

Marsh Posté le 28-12-2004 à 10:34:42    

Merci bcp pour ta réponse, en fait il s'agissait un pb de parenthèses de la boucle FOR apparemment.
J'utilise le code suivant qui fonctionne nickel  :)  

Code :
  1. @echo off
  2. set prec_=""
  3. for /F %%A in (fic_tmp_2.tmp) do call :test %%A
  4. goto end
  5. :test
  6. set actu_=%1
  7. if "%actu_%"=="%prec_%" call doublons.bat
  8. set prec_=%1
  9. pause
  10. goto :eof
  11. :End
  12. set prec_=
  13. set actu_=


Message édité par ZephIIr le 28-12-2004 à 10:35:17
Reply

Sujets relatifs:

Leave a Replay

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