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

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2018
    Messages : 15
    Points : 9
    Points
    9

    Par défaut Problème boucle qui se finit sans traiter le dernier élément

    Bonjour,

    J'ouvre cette discussion afin d'obtenir des conseils par rapport à un script batch que j'essaye de faire pour mon école (une sorte de projet de mi-parcours).

    Dans ce code ci-dessous, j'ai une liste de 8 fichiers BAT dans le répertoire "D:\test\bat\".
    Chacun des scripts créent un fichier, le script principal affiche le nom et la taille du fichier créé dans "D:\test\depot\" et vérifie que la taille n'est pas égale à 0, si elle est égale, on informe l'utilisateur et on lui demande si il veut continuer si oui la boucle recommence au début.

    Ci-dessous le code :
    Code : 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
    :: variable chemin acces
    set AccTmp=D:\test\tmp\
    set AccDepot=D:\test\depot\
    set AccBat=D:\test\bat\
    set AccArchive=D:\test\archive\
    
    set datej=%date:~8,2%%date:~3,2%%date:~0,2%
    echo.
    
    
    set id=DFEA DPRG DPZERO DPCONF EPZERO EPCONF1 NFIXOPFI FIXOPFI
    
    For %%a in (%id%) do (
    	call %AccBat%%%a.bat /w
    	pushd "%AccDepot%"
    	for /f "delims=" %%b in ('dir /b "%%a_%datej%*.txt" 2^>nul') do (
    		echo -- Fichier : %%~b --- Taille : %%~zb octets --
    		if "%%~zb"=="0" call :askuser "%%~b"
    		echo ----------------------------------------------------
    		echo.
    	)
    	popd
    )
    pause 
    
    endlocal
    
    :askuser
    echo =================== /!\ WARNING /!\ ====================
    set /p reponse=Le fichier cree "%~1" est vide (0 octets), voulez-vous continuer? (oui/non) : 
    if /i %reponse%==non echo -- -- -- & echo Fin de l'integration ! & echo -- -- -- & timeout /t 2 > nul & exit
    Ci-dessous un screen des résultats donné sur le terminal :
    Nom : img.png
Affichages : 41
Taille : 62,3 Ko

    On comprend donc que la boucle se finit avant de traiter le dernier script, c'est pourquoi après une demi-journée de recherche infructueuses, je me tourne vers vous.

    Merci par avance,
    Ryo S.

  2. #2
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    janvier 2013
    Messages
    1 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : janvier 2013
    Messages : 1 451
    Points : 3 801
    Points
    3 801

    Par défaut

    ce qui se passe en réalité est que lorsque la boucle e fini il va dans :ask .

    Pour éviter ça mets un exit/b après le endlocal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    endlocal
    exit/b
    
    :askuser
    echo =================== /!\ WARNING /!\ ====================
    set /p reponse=Le fichier cree "%~1" est vide (0 octets), voulez-vous continuer? (oui/non) : 
    if /i %reponse%==non echo -- -- -- & echo Fin de l'integration ! & echo -- -- -- & timeout /t 2 > nul & exit
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2018
    Messages : 15
    Points : 9
    Points
    9

    Par défaut Cela ne fonctionne pas.

    Bonjour,

    j'ai essayé avec le "exit/b" mais ça n'a pas l'effet voulu, en effet, le script s'arrête avant même d'afficher :
    "Le fichier cree "" est vide (0 octets), voulez-vous continuer? (oui/non) : "


    Voilà ce que le terminal affiche juste avant de se fermer :
    Nom : img.png
Affichages : 21
Taille : 43,3 Ko

    au cas où, je renvois la totalité du code ainsi que l'ordre des fichiers et leur noms dans le répertoire de travail :

    Code :
    Code : 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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    @echo off
    echo ====================================================
    echo           Script de reprise interface I43
    echo ====================================================
    timeout /t 1 > nul
    
    :: variable chemin acces
    set AccTmp=D:\test\tmp\
    set AccDepot=D:\test\depot\
    set AccBat=D:\test\bat\
    set AccArchive=D:\test\archive\
    
    
    :: affichage contenu DEPOT + nombre de fichiers
    echo ====================================================
    echo liste des fichiers presents dans depot :
    set compteur=0
    set vide=0
    for %%i in (%AccDepot%*.*) do (
    	echo %%~nxi - %%~ti - %%~zi
    	Set /A compteur+=1
    	if not %%~zi==0 set /A vide+=1
    )
    echo ----------------------------------------------------
    echo nombre de fichier : %compteur%
    echo ====================================================
    echo.
    
    :: verification nb de fichiers et taille des fichiers avant integration
    echo ====================================================
    set rep=
    
    if %compteur%==8 set /p rep=Souhaitez-vous proceder a l'integration des fichiers de la nuit applicative du %date%? (oui/non) : 
    if not %vide%==0 set /p rep=Il y a %vide% fichiers vide dans "DEPOT", souhaitez-vous proceder a l'integration des fichiers de la nuit applicative du %date%? (oui/non) : 
    
    if not %compteur%==8 set /p rep=ERREUR ! Il y a %compteur% fichiers au lieu de 8 dans "DEPOT" ! Voulez-vous quand meme proceder a l'integration des fichiers de la nuit applicative du %date%? (oui/non) : 
    echo ====================================================
    
    if /i %rep%==oui goto :integration
    if /i %rep%==non echo -- -- -- & echo Fin de l'integration dans 2 secondes ! & echo -- -- --
    if /i %rep%==non timeout /t 2 > nul & exit
    pause
    
    
    
    :integration
    setlocal enableDelayedExpansion
    set datej=%date:~8,2%%date:~3,2%%date:~0,2%
    echo.
    
    
    set id=DFEA DPRG DPZERO DPCONF EPZERO EPCONF1 NFIXOPFI FIXOPFI
    
    For %%a in (%id%) do (
    	call %AccBat%%%a.bat /w
    	timeout /t 2 > nul
    	pushd "%AccDepot%"
    	for /f "delims=" %%b in ('dir /b "%%a_%datej%*.txt" 2^>nul') do (
    		echo -- Fichier : %%~b --- Taille : %%~zb octets --
    		if "%%~zb"=="0" call :askuser "%%~b"
    		echo ------------------------------------------------------------
    		echo.
    	)
    	popd
    )
    endlocal
    exit/b
    pause
    
    :askuser
    echo ==================== /!\ WARNING /!\ =====================
    set /p reponse=Le fichier cree "%~1" est vide (0 octets), voulez-vous continuer? (oui/non) : 
    if /i %reponse%==non echo -- -- -- & echo Fin de l'integration ! & echo -- -- -- & timeout /t 2 > nul & exit
    Répertoire de travail :
    Nom : img.png
Affichages : 20
Taille : 89,2 Ko

  4. #4
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    janvier 2013
    Messages
    1 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : janvier 2013
    Messages : 1 451
    Points : 3 801
    Points
    3 801

    Par défaut

    Il n'y a aucun motif que ça ne fonctionne pas !

    Faît juste 2 echo. 1 avant le call et 1 après pour verifier
    si il n'y a pas un problème dans le call :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For %%a in (%id%) do (
            echo traitement de : %%a
    	call %AccBat%%%a.bat /w
            echo apres call OK
    	timeout /t 2 > nul
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2018
    Messages : 15
    Points : 9
    Points
    9

    Par défaut

    voilà ce que ça renvoi :
    Nom : img.png
Affichages : 18
Taille : 36,7 Ko

    avec :
    Code : 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
    :integration
    setlocal enableDelayedExpansion
    set datej=%date:~8,2%%date:~3,2%%date:~0,2%
    
    set id=DFEA DPRG DPZERO DPCONF EPZERO EPCONF1 NFIXOPFI FIXOPFI
    
    For %%a in (%id%) do (
    	echo traitement de : %%a
    	call %AccBat%%%a.bat /w
    	echo apres call OK
    	timeout /t 2 > nul
    	pushd "%AccDepot%"
    	for /f "delims=" %%b in ('dir /b "%%a_%datej%*.txt" 2^>nul') do (
    		echo -- Fichier : %%~b --- Taille : %%~zb octets --
    		if "%%~zb"=="0" call :askuser "%%~b"
    		echo ------------------------------------------------------------
    		echo.
    	)
    	popd
    )
    endlocal
    exit/b
    pause
    
    :askuser
    echo ==================== /!\ WARNING /!\ =====================
    set /p reponse=Le fichier cree "%~1" est vide (0 octets), voulez-vous continuer? (oui/non) : 
    if /i %reponse%==non echo -- -- -- & echo Fin de l'integration ! & echo -- -- -- & timeout /t 2 > nul & exit
    Je pense donc que le call n'est pas en cause dans ce problème. Puisqu'il se finit sans pb.

  6. #6
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    janvier 2013
    Messages
    1 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : janvier 2013
    Messages : 1 451
    Points : 3 801
    Points
    3 801

    Par défaut

    apparement ton FIXOPFI n'existe pas mon ami !

    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2018
    Messages : 15
    Points : 9
    Points
    9

    Par défaut

    OK autant pour moi !
    Je suis un idiot, c'est le fichier de test que j'ai créer qui ne fonctionne pas (il manquais le i à la fin).

    Merci infiniment pour tout et désolé du dérangement

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

Discussions similaires

  1. [XL-2010] Boucle qui se stoppe sans explication
    Par JFV__ dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 24/03/2017, 14h57
  2. [XL-2013] Problème macro qui BOUCLE sans raison
    Par tyndare36 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/11/2014, 15h36
  3. Problème actionscript qui boucle
    Par baleiney dans le forum Flash
    Réponses: 1
    Dernier message: 26/03/2007, 08h44
  4. Réponses: 10
    Dernier message: 07/01/2007, 13h03
  5. [problème Free]boucle qui ne marche plus
    Par xender dans le forum Requêtes
    Réponses: 1
    Dernier message: 16/12/2006, 15h43

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