Renommer des fichiers avec commande batch

ludo -  
 ludo -
Bonjour,

J'ai besoin de votre aide pour renommer une liste de fichiers à l'aide d'une commande .bat :
voila, je voudrais que les fichiers "source_#####_####" soient renommés en "ID_#####" : remplacer source par ID et en conserver que le premier groupe de chiffres #####.
J'ai essayé avec le commande REN pour changer les lettres du début mais je n'obtient pas ce que je veux: en effet,
REN source* ID* me donne "IDurce_#####_####
et je ne sais pas comment faire pour le reste à savoir garder le premier groupe de chiffres.
Si vous pouvez m'aider et m'indiquer un petit code ca serait sympa !
Merci d'avance

23 réponses

  • 1
  • 2
  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    est ce que le nombre de # est fixe ? 5 # et 4 #
    0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    oublier la question précédente
    essayer ça, enlever le echo si c'est bon

    @ echo off  
    setlocal enableDelayedExpansion  
    for /f "delims=_ tokens=1,2,3" %%a in ('dir /b source*') do (  
    set f=id_%%b  
    echo ren %%a_%%b_%%c !f!  
    )  
    
    0
  3. ludo
     
    Merci beaucoup !. Les chiffres que j'ai symbolisé par des # sont en nombre variable dans les paquets mais séparés par des "_".
    Je dois avouer que j'y comprends rien à ce langage mais je vais essayer
    ....
    0
  4. ludo
     
    ca marche pas. les fichiers ne sont pas renommés
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    il faut enlever le echo
    ren %%a_%%b_%%c !f! 
    0
  7. ludo
     
    hum... cela ne fait rien visiblement...
    peux-tu expliquer le code ?
    Merci encore pour ton aide :)
    0
  8. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    setlocal enableDelayedExpansion
    autorise la modification des variables dans une boucle for

    for /f "delims=_ tokens=1,2,3" %%a in ('dir /b source*') do (
    on boucle sur l'ensemble de noms de fichiers retournés par dir,
    avec _ comme séparateur. Donc %%a = source, %%b = #####, %%c =####

    set f=id_%%b
    le nouveau nom est : f = id_#####

    ren %%a_%%b_%%c !f!
    on renomme
    0
  9. ludo
     
    Merci, cela fonctionne.
    Comment puis-je faire maintenant pour désigner à cette commande un répertoire pour lequel renommer les fichiers: curieusement la commande CD repertoire ne semble pas fonctionner...
    Enfin, souci: je perd l'extension des fichiers!!!. Il s'agit en particulier d'images jpg et png, psd.
    Merci d'avance
    0
  10. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    pour l'extension comment s'appellent les fichiers source_#####_####.EXT ou source_#####_#### ?

    pour la commande cd, si il y a changement de lecteur, utiliser cd /d
    0
  11. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    pour renommmer en conservant l'extension
    @ echo off
    
    setlocal enableDelayedExpansion
    for /f "delims=_ tokens=1,2,3" %%a in ('dir /b source*') do (
    set f=id_%%b%%~xc
    ren %%a_%%b_%%c !f!
    )
    
    0
  12. ludo
     
    Merci, c'est parfait.
    Dernière question: si je veut renommer "source" en "C-ID"

    set f=C-ID_%%b%%~xc
    curieusement, cela ne fonctionne pas. Question de syntax avec le tiret ?

    Merci beaucoup pour ton aide, je n'aurais jamais trouvé tout seul :)
    0
  13. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    si, ca doit marcher, c'est l'espace qui peut être un problème, pas le -
    0
  14. ludo
     
    Pour corser la chose, comment modifier le code si j'ai un nombre variable de paquets ### delimités par des _ dans le nom initial du fichier ? de sorte à n'en garder qu'un à l'arrivé ?
    0
  15. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    la variable %%b sera toujours le premier champ de #### après source
    0
  16. ludo
     
    plus exactement , je voudrais que cela fonctionne avec des fichiers "source_#####_####" aussi bien que "source_#####_####_#####_####_####"
    0
  17. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    C:> type liste.txt
    source_#####
    source_#####_####
    source_#####_####_####
    source_#####_####_####_####
    source_#####_####_#####_####_###
    
    C:>
    C:> type aa.bat
    @ echo off
    
    for /f "delims=_ tokens=1,2,3" %%a in ('type liste.txt') do (
    echo %%a_%%b
    )
    C:>
    C:> aa
    source_#####
    source_#####
    source_#####
    source_#####
    source_#####
    
    0
  18. ludo
     
    d'où sort cette "liste.txt " ??
    Je souhaite juste exécuter un batch qui va renommer les fichiers d'un répertoire:
    par exemple:
    source_56075224_5835787_p0_544491b devient ID_56075224
    source_591812442_7999 devient ID_59112442

    renommer source et ne garder que le premier paquet de chiffres entre les deux premiers "_", et ce quelque soit le nombre de paquets.
    0
  19. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    liste.txt contient des exemples de noms de fichier

    voila
    C:> dir /b
    source_56075224_5835787_p0_544491b
    source_591812442_7999
    
    C:> type aa.bat
    @ echo off
    setlocal enableDelayedExpansion
    for /f "delims=_ tokens=1,2*" %%a in ('dir /b source*') do (
    set f=ID_%%b%%~xc
    ren %%a_%%b_%%c !f!
    )
    
    C:>aa
    
    C:> dir /b
    ID_56075224
    ID_591812442
    
    C:>
    0
  20. heyquem Messages postés 808 Statut Membre 131
     
    salut ludo,

    Est-ce que tu es attaché à faire un programme en batch ?
    En Python, ce serait beaucoup plus facile.
    Enfin bon, je dis ça parce que je ne connais pas le batch et que les codes aimablement proposés par dubcek ne me parlent pas. Mais justement, Python est plus parlant quand on voit un code.

    Et puis, il y a un problème potentiel:
    que se passera-t-il avec le code de dubcek et que voudrais tu qu'il se passe s'il arrive le cas où deux fichiers de noms
    source_56075224_5835787_p0_544491b
    et
    source_56075224_8888888_p0_544491b
    seront à renommer ?

    Il va falloir rajouter des traitements dans le programme batch, et ça va devenir complexe. Le batch n'est pas très bien adapté me semble-t-il.

    Quant à Python, il suffit de 10 minutes pour l'installer et les programmes s'écrivent rapidement
    0
  • 1
  • 2