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 :

Renommer des dossiers


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 112
    Par défaut Renommer des dossiers
    Bonjour,

    J'ai besoin de renommer des dossiers en masse et régulièrement. Il s'agit de dossiers dont le nom est un nombre. Je doit rajouter des "0" devant pour avoir un nombre à 6 chiffres minimum et précéder le tout de la lettre "P".

    Par exemple, si j'ai les dossiers 1 123 123456 toto 1234567, je dois avoir à la fin P000001 P000123 P123456 toto P1234567.
    Un équivalent en c/c++ serait printf ("P%06d",nom_nom_de_dossier).

    Je ne sais malheuresement pas :
    - comment filtrer les dossier dont le nom représente un nombre
    - comment le renommer en complétant du nombre de "0" nécessaires.

    En shell script (sous UNIX/LINUX/MacOS) on peut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for i in `ls .`
    do
        if [ -z "`echo $i | sed s/[0-9]*//`" ]
        then
            mv $i `printf "P%06d" $i`
        fi
    done
    En batch je sais à peine faire une boucle sur les répertoires :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FOR /f "DELIMS=" %%A IN ('dir /ad/b') DO
    Si quelqu'un pouvait aider l'éternel newbe que je suis en batch, ce serait bien sympa !!
    Merci par avance !!

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Mars 2014
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Mars 2014
    Messages : 158
    Par défaut
    !!!!LE CODE CI DESSOUS EST NON FONCTIONEL!!!!

    l'idée generale du code que tu cherche a avoir est
    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
    ECHO on
    rem sauvegarde des noms des dossiers
    dir /b /ad > nom_des_dossier.txt
    rem debut de la boucle
    for %%a in (nom_des_dossier.txt) do (
    rem initialisation des variable te permetant de compter le nombre de caractere des dossier
    SET a=%%a
    SET longueur=0
    rem calcul nombre de caractere
    :boucle
    IF "%a%"=="" GOTO finboucle
    SET a=%a:~0,-1%
    SET /A longueur=%longueur%+1
    GOTO boucle
    rem modification du nom du dossier
    :finboucle
    if !longueur!<6 do (
    set nbCaracManquant=(6 - %longueur%)
    )
    :bclcarac
    if %nbCaracManquant%==0 goto end
    else if %nbCaracManquant%==1 goto 2
    else if %nbCaracManquant%==2 goto 3
    else if %nbCaracManquant%==3 goto 4
    else if %nbCaracManquant%==4 goto 5
    else if %nbCaracManquant%==5 goto 6
    else if %nbCaracManquant%==6 goto 7
    
    :2
    set a=0%a%
    goto end
    :3
    set a=00%a%
    goto end
    :4
    set a=000%a%
    goto end
    :5
    set a=0000%a%
    goto end
    :6
    set a=00000%a%
    goto end
    :7
    set a=000000%a%
    goto end
    :end
    set a=P%a%
    ren %%a %a%
    pause
    )
    pause
    le bug retourne est aux niveau du j'espere que cette base t'aideras

    Coordialement comandant chaos

  3. #3
    Membre émérite 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
    Par défaut
    Bonjour,
    je n'ai fais qu'une partie du code (il manque l'ajout de 0 en fonction du nombre de lettres du fichier) et j'ai commenté la fonction de renommage pour le moment:
    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
    @echo off
    Setlocal EnableDelayedExpansion
    
    for %%i in (%CD%\*.txt) do (
    	set name=%%~ni
    	set new_name=P0!name!
    	rem il faut juste trouve comment repeter le bon nombre de 0
    	echo !filename!
    	echo !new_name!
    	rem ren "*.txt" "!new_name!"
    )
    
    set #=%name%
    set length=0
    :loop
    if defined # (
        set #=%#:~1%
        set /A length += 1
        goto loop
    )
    echo %name% contient %length% caracteres!
    if %length% LSS 6 goto less_6
    
    :less_6
    set /a t=(6-%length%)
    echo %name% contient moins de 6 caracteres (6-%length%=%t%)
    pause
    Pourquoi j'ai fais ce code sachant que Comandant Chaos en a déjà fait un?
    Je voulais trouver une méthode pour répéter un echo en fonction d'un multiplicateur du genre "(echo 0)*%nombre%.
    Je n'ai pas trouvé de solution "propre".
    De plus mon code donne la solution au soucis du comandant ("LSS")
    EQU > égal à
    NEQ > différent de
    LSS > inférieur à
    LEQ > inférieur ou égal à
    GTR > supérieur à
    GEQ > supérieur ou égal à
    Voila, j'espère que ce post vous aura un peu aidé ^^

  4. #4
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    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 478
    Par défaut
    Bonjour à tous,

    Voici une petite astuce très simple pour avoir un nombre déterminer
    de caractères.

    On incremente le nombre maximale de 0 (6 dans notre cas) à la variable (nom du dossier)

    exemple :

    si le nom du dossier est 1234
    on incréments 6 0 donc :

    0000001234

    e on récupère les 7 derniers caractères :

    0001234

    Ainsi indépendamment du nombre de caractères de ta variable en sortie
    on aura toujours le nombre juste de 0.

    Donc pour ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @echo off
    Setlocal EnableDelayedExpansion
    
    for /f %%a in ('dir /a /b') do (
          set $nom=000000%%a
          set $nom=!$nom:~-7!
          ren %%a P!$nom!)
    Voilà l'idée j'ai pas testé n'ayant pas de PC sous la main.
    Mais ça ne devrait pas être trop dur à débugger.


  5. #5
    Membre émérite 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
    Par défaut
    @sachadee: tu me fais rigolé xD
    j'ai pas testé n'ayant pas de PC sous la main.
    Le mec il dev et double post depuis cet appareil:
    Nom : emetteur_morse.jpg
Affichages : 248
Taille : 32,5 Ko
    Je suis bluffé! ^^

    Sinon ton idée est bien ingénieuse, je regarderais ça plus tard, merci beaucoup ^^

    EDIT:
    Voici mon code édité avec la méthode magique de sachadee:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @echo off
    Setlocal EnableDelayedExpansion
    
    set inputFolder=C:\Users\...
    for %%a in (%inputFolder%\*.txt) do (
    	set $name=%%~na
    	set $nom=000000!$name!
    	set $nom=!$nom:~-6!
    	set $file_extension=%%~xa
    	ren %%a P!$nom!!$file_extension!
    )
    pause
    PS: Script testé avec des fichiers .txt

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 112
    Par défaut
    Wouahou !!! quelle motivation de votre part !! ça fait plaisir à voir !! Merci beaucoup.

    Je vais tester tout ça, et dès que ce sera bon je posterait la version finale et je pourrai clôturer cette discussion. Merci encore !!

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

Discussions similaires

  1. [Batch] renommer des dossiers et leurs contenu
    Par mushi-mush dans le forum Scripts/Batch
    Réponses: 10
    Dernier message: 07/09/2013, 10h45
  2. Renommer des dossiers, des sous-dossiers et des fichiers
    Par rambc dans le forum Général Python
    Réponses: 15
    Dernier message: 19/04/2010, 20h22
  3. Renommer des dossiers par lots
    Par rambc dans le forum AppleScript
    Réponses: 12
    Dernier message: 18/04/2010, 13h27
  4. Renommer des dossier et des fichiers
    Par rambc dans le forum Général Python
    Réponses: 6
    Dernier message: 29/01/2010, 19h11
  5. Renommer des dossiers
    Par ced1984 dans le forum VBScript
    Réponses: 2
    Dernier message: 14/02/2007, 16h24

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