IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Fonctionnement boucle for [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2014
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Fonctionnement boucle for
    Bonjour à tous,

    Je souhaiterais comprendre pourquoi ma boucle for se joue sur 3 occurrences !!!
    Je m'explique : je parse un fichier qui me ressort 2 lignes, ces 2 lignes sont coupées en 3 parties que j'envoie dans des variables.

    Voici mon code :
    Code Bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    @echo off
    set Now=%date:~6,4%-%date:~3,2%-%date:~0,2%
    if not exist C:\Winnt\archives_signatures\%Now% (
    	mkdir C:\Winnt\archives_signatures\%Now%
    	xcopy /e /y /r C:\Winnt\Signatures\* C:\Winnt\archives_signatures\%Now% > NUL
    )
    type "C:\Users\BB07814N\Desktop\ajout_suppression.csv" > C:\Temp\ajout_suppression.txt
    for /f "tokens=1,2,3 delims=;" %%a IN ('findstr /i %computername% C:\Temp\ajout_suppression.txt') DO (
    	set cible=%%a
    	set sig=%%b
    	set act=%%c
    	set now2=%date:~6,4%%date:~3,2%%date:~0,2%
    	call :add_del
    )
     
    del /q C:\Temp\ajout_suppression.txt
     
    :add_del
    if "%act%" == "Ajout" (
    	if exist "C:\Winnt\Signatures\%sig%" (
    		echo %now2% %cible% La signature %sig% existe deja et ne sera pas ajoutee
    	) else (
    		type nul > "C:\Winnt\Signatures\%sig%"
    		if errorlevel 0 (
    			echo %now2% %cible% Ajout de la signature %sig% : OK
    		) else (
    			echo %now2% %cible% Ajout de la signature %sig% : KO
    		)
    	)
    ) else if "%act%" == "Suppression" (
    	if not exist "C:\Winnt\Signatures\%sig%" (
    		echo %now2% %cible% La signature %sig% n'existe pas elle ne sera pas supprimee
    	) else (
    		del /Q "C:\Winnt\Signatures\%sig%
    		if errorlevel 0 (
    			echo %now2% %cible% Suppression de la signature %sig% : OK
    		) else (
    			echo %now2% %cible% Suppression de la signature %sig% : KO
    		)
    	)
    ) else (
    	echo Action non prevue
    )
    goto :eof

    Et voici le résultat :
    Code Bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    20160701 zeq320m1 Suppression de la signature test_avant_suppression : OK
    20160701 zeq320m1 Ajout de la signature test_apres_ajout : OK
    20160701 zeq320m1 La signature test_apres_ajout existe deja et ne sera pas ajout
    ee

    Mon résultat devrait contenir simplement les 2 premières lignes !!!
    Pourquoi la boucle repart sur la première occurrence ???

    Je vous remercie par avance.

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    D'après ce que je voit ta boucle se joue bien deux fois.
    Mais après la boucle for ton code continue de se dérouler et la il passe dans ton étiquette à ce moment la.

    Il faudrait que tu mettre un 'goto :eof' ou un 'exit' en ligne 17.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2014
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Wouaaaaaaah merci.

    En effet c'est bon avec le end of line !!! Je ne comprend toujours pas pourquoi le batch renvoie la dernière occurrence de la boucle alors qu'il devrait s'arrêter à 2 mais bon...
    Le batch sera toujours un mystère pour moi...

    Merci encore.
    Sujet résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] Boucle for imbriquee dans une boucle if qui refuse de fonctionner
    Par Egan69 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 27/06/2013, 19h30
  2. [XL-2010] Boucle For qui ne fonctionne pas pour toutes les valeurs
    Par pleskyd dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 13/02/2012, 15h16
  3. une boucle for qui ne fonctionne pas
    Par piffeo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/11/2008, 21h52
  4. Fonctionnement de la boucle for?
    Par Hydex dans le forum VBA Access
    Réponses: 2
    Dernier message: 05/06/2007, 16h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo