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 :

La boucle ne suit pas :(


Sujet :

Scripts/Batch

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 112
    Points : 64
    Points
    64
    Par défaut La boucle ne suit pas :(
    Bonjour tout le monde,

    Je suis débutant en BATCH (plus habitué au Shell de Linux...). Je dois réaliser un script pour renuméroter une série de dossiers.
    Alors après quelques récups de bout de scripts (oui j'ai honte...) et en rajoutant de mon propre code de débutant j'obtiens quelque-chose, mais :
    • ma boucle qui liste les fichiers s'interompt au premier passage
    • la variable initée par cette première boucle semble être perdue

    Et ce, depuis que j'ai fait une boucle interne avec une balise :trim

    Il ne me manque pas grand chose je pense pour faire marcher le tout...

    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
    @echo off
    Setlocal EnableDelayedExpansion
    :: Renumérotation d'une série de dossier de type "PXXXXX" (exemples : P00050, P00500, P00807, P123456789)
    :: en rajoutant 500 (résultats des exemples : P00550, P01000, P01307, P123457289)
    
    for /F %%a in ('dir /ad /b') do (
    :: Listing des fichiers
    :: /ad = uniquement les répertoires
    :: /b = juste les noms, pas les détails
        set $nom=%%a
        echo AVANT trim : !$nom!
        :: on supprime le "P" initial puis tous les éventuels "0" qui suivent
        :trim
        set $nom=!$nom:~1!
        if "!$nom:~0,1%!"=="0" (
            goto trim
        )
        echo APRES trim : !$nom!
    	if $nom LSS 9999999999999999999 (
            :: Le nom du dossier est bien numérique
    		:: On essaye de traiter que les dossiers dont le nom est un nombre
    		echo TRAITEMENT DE !$nom!
            set /a $nom=!$nom!+500
            echo APRES AJOUT : !$nom!
    		if $nom LSS 10000 (
    			:: On ne rajoute des 0 devant que si le nombre contient au plus 4 chiffres
    			set $nom=00000!$nom!
    			set $nom=!$nom:~-5!
    		)
    		:: On rajoute un "P" devant
            echo AU FINAL : P!$nom!
    		ren %%a P!$nom!
    	)
    )
    echo TRAITEMENT TERMINE
    Mais voilà ce qu'il se passe lorsque je l'exécute alors qu'il y a 4 dossiers à traiter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    C:\Users\Serge\Documents\Boulot\Développements\scripts\batch>renamePXXXXX.bat
    Le lecteur spécifié est introuvable.
    AVANT trim : P00050
    APRES trim : 50
    Le lecteur spécifié est introuvable.
    TRAITEMENT DE 50
    APRES AJOUT : 550
    AU FINAL : P00550
    Le fichier spécifié est introuvable.
    TRAITEMENT TERMINE
    Si quelqu'un pouvait m'aiguiller...
    Merci bien d'avance !!

  2. #2
    Membre éclairé Avatar de devilsnake88
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 453
    Points : 809
    Points
    809
    Par défaut
    Salut,

    Essaye ceci mais je pense que tu devras juste ajouter une condition parce que j'ai un peu "trop" modifié ton code et si le nom de dossier ne commence pas par un "0" il va quand même renommer

    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
    @echo off & cls
    Setlocal EnableDelayedExpansion
    :: Renumérotation d'une série de dossier de type "PXXXXX" (exemples : P00050, P00500, P00807, P123456789)
    :: en rajoutant 500 (résultats des exemples : P00550, P01000, P01307, P123457289)
     
    for /F %%a in ('dir /ad /b') do (
    :: Listing des fichiers
    :: /ad = uniquement les répertoires
    :: /b = juste les noms, pas les détails
        set "$nombase=%%a"
        :: on supprime le "P" initial puis tous les éventuels "0" qui suivent
        set "$nomnum=!$nombase:~1!"
        for /f "tokens=* delims=0" %%x in ("!$nomnum!") do (
            set "$nomnum=%%x"
                :: Le nom du dossier est bien numérique
                :: On essaye de traiter que les dossiers dont le nom est un nombre
                set /a "$nom=!$nomnum!+500"
                if "$nom" LSS "10000" (
                    :: On ne rajoute des 0 devant que si le nombre contient au plus 4 chiffres
                    set "$nom=00000!$nom!"
                    set "$nom=!$nom:~-5!"
                )
                :: On rajoute un "P" devant
                echo - Rendu final : "P!$nom!"
                ren "%%a" "P!$nom!"
        )
    )
    echo TRAITEMENT TERMINE
    echo ---------------
    echo.
    pause
    exit

    Tiens nous au courant.

    EDIT: ajoute ta condition:
    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    if "!$nombase:~0,1%!"=="0"
    avant mon
    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f "tokens=* delims=0" %%x in ("!$nomnum!")

Discussions similaires

  1. Réponses: 24
    Dernier message: 28/03/2007, 14h05
  2. [Forms6i]Composant ne suit pas la fenetre forms
    Par patmaba dans le forum Forms
    Réponses: 17
    Dernier message: 13/04/2006, 12h15
  3. [GradientPaint] ne suit pas le composant
    Par xavlours dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 13/03/2006, 09h04
  4. ma boucle ne fonctionne pas
    Par mélo6 dans le forum ASP
    Réponses: 2
    Dernier message: 17/06/2005, 11h53

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