Problème avec un IF imbriqué dans une boucle FOR [RESOLU] - Shell/Batch - Programmation
Marsh Posté le 15-12-2005 à 13:50:25
Bon, j'ai apporté quelques modifications à la structure de mon script : je l'ai divisé en deux fichiers TEST.CMD et TEST1.CMD.
Voici leur contenu :
TEST.CMD
for /f "delims=" %%a in ('type JRN_ELEC.FIC') do ( |
TEST2.CMD
findstr "%1%" JRN_ELEC.VAR |
Maintenant le test 'IF' se fait correctement, et la valeur de %errorlevel% évolue correctement.
Mais j'ai un problème avec la commande XCOPY. Je ne comprends pas pourquoi, lors du déroulement du script la destination de mes fichier est tronquée. Je vous mets le déroulement ci-dessous, vous verrez par vous-même :
|
Donc le E:\ définissant l'unité de destination disparait de la commande XCOPY.
Comment cela est-il possible ????
Marsh Posté le 15-12-2005 à 23:48:45
Tu as des guillemets de trop. Essaie %~1 au lieu de %1% pour xcopy.
Code :
|
Pour la valeur "erronée" de errorlevel, c'est l'histoire de l'expansion retardée. Fais :
Code :
|
pour l'explication et les exemples.
En résumé, il fallait écrire :
Code :
|
Enfin, tes deux batch séparés peuvent être combinés en un en utilisant en appelant une procédure (call :label)
Code :
|
Marsh Posté le 16-12-2005 à 13:51:14
Merci nglechau pour ton aide, ça m'a permis de résoudre tous mes problèmes.
Marsh Posté le 15-12-2005 à 10:27:20
Bonjour,
Je rencontre actuellement un soucis avec un batch dans lequel j'utilise un test 'IF' dans une boucle 'FOR'.
Je m'explique :
- J'ai deux fichiers contenant du texte, JRN_ELEC.FIC dont le contenu est (chacune des lignes correspond à un nom de fichier) :
1-20051021
1-20051020_20051130
1-20051020
1-20051019
1-20051018
et le fichier JRN_ELEC.VAR dont le contenu est :
------------------------------------------------------------------------------
---------------------------------------------------------------------
-----------------------------------------------------------------------
-----------------------------------
1-20051020_20051130
1-20051020
(2 rows affected)
- Mon script batch doit vérifier s'il y a dans le fichier JRN_ELEC.VAR un ou plusieurs nom présent dans le fichier JRN_ELEC.FIC.
Pour se faire, mon script compare chacune des lignes du fichier JRN_ELEC.FIC avec le contenu de JRN_ELEC.VAR, et s'il trouve une même valeur dans les deux fichiers, il exécute la copie du fichier en question d'un endroit vers un autre.
Voici le scrit :
for /f "delims=" %%a in ('type JRN_ELEC.FIC') do (
echo Fichier à copier : %%a
findstr "%%a" JRN_ELEC.VAR
echo Errorlevel : %errorlevel%
if %errorlevel%==0 XCOPY /C /E /F /I /H /R /Y E:\REP1\%%a\*.* E:\REP2\%%a
echo Fichier traité : %%a
)
Mon incompréhension : et bien, quelque soit la valeur de %%a (elle change bien à chaque passage dans ma boucle), j'ai toujours la même valeur pour %errorlevel%. Et il semblerait que cette valeur reste la même que celle qui a été trouvée lors du premier passage dans la boucle.
Donc, je ne comprends pas pourquoi cette valeur %errorlevel% n'évolue-t-elle pas, et que ma clause 'IF' réagisse de la même manière pendant tout le déroulement du script.
Si quelqu'un a une idée ...
Ci-dessous la capture du déroulement de mon script (sous Windows 2000) :
C:\sauvegardes>for /F "delims=" %a in ('type JRN_ELEC.FIC') do (
echo Fichier à copier : %a
findstr "%a" JRN_ELEC.VAR
echo Errorlevel : 1
if 1 == 0 XCOPY /C /E /F /I /H /R /Y E:\REP1\%a\*.* E:\REP2\%a
echo Fichier traité : %a
)
C:\sauvegardes>(
echo Fichier à copier : 1-20051021
findstr "1-20051021" JRN_ELEC.VAR
echo Errorlevel : 1
if 1 == 0 XCOPY /C /E /F /I /H /R /Y E:\REP1\1-20051021\*.* E:\REP2\1-20051021
echo Fichier traité : 1-20051021
)
Fichier à copier : 1-20051021
Errorlevel : 1
Fichier traité : 1-20051021
C:\sauvegardes>(
echo Fichier à copier : 1-20051020_20051130
findstr "1-20051020_20051130" JRN_ELEC.VAR
echo Errorlevel : 1
if 1 == 0 XCOPY /C /E /F /I /H /R /Y E:\REP1\1-20051020_20051130\*.* E:\REP2\1-20051020_20051130
echo Fichier traité : 1-20051020_20051130
)
Fichier à copier : 1-20051020_20051130
1-20051020_20051130
Errorlevel : 1
Fichier traité : 1-20051020_20051130
C:\sauvegardes>(
echo Fichier à copier : 1-20051020
findstr "1-20051020" JRN_ELEC.VAR
echo Errorlevel : 1
if 1 == 0 XCOPY /C /E /F /I /H /R /Y E:\REP1\1-20051020\*.* E:\REP2\1-20051020
echo Fichier traité : 1-20051020
)
Fichier à copier : 1-20051020
1-20051020_20051130
1-20051020
Errorlevel : 1
Fichier traité : 1-20051020
C:\sauvegardes>(
echo Fichier à copier : 1-20051019
findstr "1-20051019" JRN_ELEC.VAR
echo Errorlevel : 1
if 1 == 0 XCOPY /C /E /F /I /H /R /Y E:\REP1\1-20051019\*.* E:\REP2\1-20051019
echo Fichier traité : 1-20051019
)
Fichier à copier : 1-20051019
Errorlevel : 1
Fichier traité : 1-20051019
C:\sauvegardes>(
echo Fichier à copier : 1-20051018
findstr "1-20051018" JRN_ELEC.VAR
echo Errorlevel : 1
if 1 == 0 XCOPY /C /E /F /I /H /R /Y E:\REP1\1-20051018\*.* E:\REP2\1-20051018
echo Fichier traité : 1-20051018
)
Fichier à copier : 1-20051018
Errorlevel : 1
Fichier traité : 1-20051018
Message édité par jdeheyn le 16-12-2005 à 13:51:57