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 noms de fichiers [Batch]


Sujet :

Scripts/Batch

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Points : 8
    Points
    8
    Par défaut Renommer des noms de fichiers
    Bonjour,

    je souhaiterais créer un fichier .bat qui lors de son exécution renomme tous les fichiers contenus dans un dossier spécifié, en faisant correspondre à un caractère un autre caractère.

    Par exemple, remplacer le n par t, le a par x, le m par j, le e par a... donc si le fichier s'appelle name.jpg le nom du nouveau fichier sera par txja.jpg.

    Je pense qu'un tel code est possible mais je ne m'y connais absolument pas en codage de .bat.

    Pourriez-vous m'aider?

    Merci.

  2. #2
    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
    Points : 3 768
    Points
    3 768
    Par défaut
    Salut,

    essaye ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    @echo off
    
    setlocal enabledelayedexpansion enableextensions
    
    for /f "delims=" %%a in ('dir *.* /aa /b') do (set $f=%%~na
                                                  echo TRAITEMENT DE !$f!
                                                  set $f=!$f:n=t!&echo !$f!
                                                  set $f=!$f:x=m!&echo !$f!
                                                  set $f=!$f:e=a!&echo !$f!
                                                  ECHO LE NOUVEAU FICHIER CE NOMMERA !$f!
                                                  pause)
    Je n'ai pas faite le "RENAME" a toi de l'inclure.

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

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Merci.

    Je vais voir si je peux me débrouiller avec le code que tu m'as donné et le rename. Je repasserai en cas de souci.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Comme je le prévoyais je ne m'en sors pas.
    J'ai tenté d'ajouter l'instruction pour renommer le fichier mais sans succès. La fenêtre de commande m'affiche constamment un message d'erreur.

    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 enableextensions
    
    for /f "delims=" %%a in ('dir C:\Users\Micro\Pictures /aa /b') do (set $f=%%~na
                                                  echo TRAITEMENT DE !$f!
                                                  set $f=!$f:n=t!&echo !$f!
                                                  set $f=!$f:x=m!&echo !$f!
                                                  set $f=!$f:e=a!&echo !$f!
                                                  ECHO LE NOUVEAU FICHIER CE NOMMERA !$f!
                                                  ren "C:\Users\Micro\Pictures\%%a" "%$f%"
                                                  pause)

    De plus je ne vois pas comment conserver l'extension du fichier et j'aimerais que le .bat s'execute pour tous les fichiers qui appartiennent au même dossier que celui-ci. Comment puis-je résoudre le problème?

  5. #5
    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
    Points : 3 768
    Points
    3 768
    Par défaut
    salut,

    interesse toi à la dernière partie de la documentation de la commande
    "FOR /?".

    pour ton code voici la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @echo off
     
    
    setlocal enabledelayedexpansion enableextensions
    
    for /f "delims=" %%a in ('dir *.* /aa /b') do (set $f=%%~na
                                                  echo TRAITEMENT DE !$f!
                                                  set $f=!$f:n=t!&echo !$f!
                                                  set $f=!$f:x=m!&echo !$f!
                                                  set $f=!$f:e=a!&echo !$f!
                                                  ECHO LE NOUVEAU FICHIER CE NOMMERA !$f!
                                                  ECHO "%%~Fa" "%%~dpa!$f!%%~xa"
                                                  pause)

    remplace le dernier "ECHO" par "REN".

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

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Merci encore pour ton aide.

    J'ai jeté un coup d’œil à l'aide (je pense que tu parlais de celle qu 'on obtient avec "help for" dans l'invite de commande) mais tout ça est un peu compliqué pour moi.

    En ce qui concerne ton nouveau code je l'ai testé en remplaçant comme tu me l'as dit le dernier "ECHO" par "REN" mais j'ai le message d'erreur: "La syntaxe de la commande n'est pas correcte".

    Je vais tenter de creuser du coté de l'utilisation de la commande "REN".

  7. #7
    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
    Points : 3 768
    Points
    3 768
    Par défaut
    Salut,

    Effectivement j'avais oublié. Le 2eme arguments de la commande "REN" ne peut pas être un path complet, Seulement un nom de fichier.

    Corrige :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    REN "%%~Fa" "!$f!%%~xa"
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Merci, maintenant ça tourne impeccablement.

    Il y a juste un souci que je n'avais pas vu venir: si j'inclus dans le code toutes les autres lettre de l'alphabet certains caractères sont modifiés deux fois. Par exemple: avec a->t et t->f le "a" sera au final remplacé par le "f" au lieu du "t".

    Donc je me demandais si on pouvais régler le problème en imbriquant une autre boucle for et des instructions conditionnelles, du genre:

    -boucle sur le nombre de caractères du nom du fichier
    -si le caractère vaut "a" on le remplace par "t" puis on passe directement au caractère suivant
    -si le caractère vaut "t" on le remplace par "f" puis on passe directement au caractère suivant
    -.....

    Est-ce qu'un tel code est programmable?

  9. #9
    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
    Points : 3 768
    Points
    3 768
    Par défaut
    A toi de créer une méthodolgie qui colle à ton problème.

    Tu pourrais par exemple pour éviter ce proplème :

    -- remplacer le a --> #
    -- remplacer le t --> f

    puis au final :

    -- remplacer le # --> t

    De cette manière, très simplement, et uniquement avec la substitution ton problème est réglé.

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

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Effectivement mon problème est résolu avec ta méthode.

    Merci beaucoup.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Encore un tout petit détail, j'ai voulu faire la distinction entre les majuscules et les minuscules en utilisant /S mais le remplacement ne marche plus?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    set $f=!$f:a/S=#!&echo !$f!
    set $f=!$f:#=m!&echo !$f!
    set $f=!$f:A/S=#!&echo !$f!
    set $f=!$f:#=M!&echo !$f!

  12. #12
    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
    Points : 3 768
    Points
    3 768
    Par défaut
    C'est quoi ce /S ???
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    En cherchant un peu sur internet j'ai vu que l'on pouvait faire la distinction en minuscules et majuscules avec /S mais je dois mal l'utiliser.

  14. #14
    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
    Points : 3 768
    Points
    3 768
    Par défaut
    Avec cette technique (substitution) ça n'est pas possible (à ma connaissance).

    Si tu veux faire une difference de maj et min il faudrait recuperer chaque lettre
    de ton nom et la tester de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if %lettre%==a (set lettre=t)
    if %lettre%==A (set lettre=T)
    Amicalement
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    D'accord donc si je comprends bien il faut que je rajoute une boucle for qui tourne sur chaque lettre du nom?

  16. #16
    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
    Points : 3 768
    Points
    3 768
    Par défaut
    par exemple.
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Voila ce que j'ai réussi à faire par contre je ne vois pas comment forcer la sortie des instruction if et concaténer les lettres pour reconstituer le nom du fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @echo off
     
    
    setlocal enabledelayedexpansion enableextensions
    
    for /f "delims=" %%a in ('dir *.* /aa /b') do (
                           for /g "delims=" %%b in (%%~na) do(
                                                  set lettre=%%b
                                                  if %lettre%==a (set lettre=t)
                                                  if %lettre%==A (set lettre=T)
                                                  if %lettre%==b (set lettre=e)
                                                  if %lettre%==B (set lettre=E)
                                                  ))

  18. #18
    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
    Points : 3 768
    Points
    3 768
    Par défaut
    Et ça marche ça ??? Tu récupères les lettres une par une ???
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Non cela ne marche pas, j'ai tenté de rajouter des echo comme tu les avais mis dans le code précédent pour vérifier mais la fenêtre d'invite de commande s'ouvre et se ferme instantanément.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @echo off
     
    
    setlocal enabledelayedexpansion enableextensions
    
    for /f "delims=" %%a in ('dir *.* /aa /b') do (
                           for /g "delims=" %%b in (%%~na) do(
                                                  set lettre=%%b
                                                  if %lettre%==a (set lettre=t)&echo !lettre!
                                                  if %lettre%==A (set lettre=T)&echo !lettre!
                                                  if %lettre%==b (set lettre=e)&echo !lettre!
                                                  if %lettre%==B (set lettre=E)&echo !lettre!
                                                  pause))

  20. #20
    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
    Points : 3 768
    Points
    3 768
    Par défaut
    Tu peux te servir de ça et l'adapter a ton problème :

    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
    
    :::Par Sachadee
    :::06/2013
    :::www.bbat.forumeiros.com
    
    @echo off&cls&color 18
    ::::LA VARIABLE DONT ON VEUT LA LONGEUR OU LA DECOMPOSITION
    set $m=BATCH ON-LINE C'EST LE PIED
    ::::
    
    setlocal enabledelayedexpansion enableextensions
    set #=%$m%
    set /a $l=0
    :loop
    if defined # (set #=%#:~1%&set $l#=!$m:~%$l%,1!
    if  "!$l#!" neq " " echo !$l#! %$l%
    if "!$l#!" equ " " echo # %$l% Espace
    set /a $l +=1
    goto :loop)
    echo.
    echo LONGUEUR = !$l!
    pause
    La variable qui t'interesse est : !$l#!

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

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Créer une liste avec des noms de fichiers
    Par Jeffboj dans le forum Access
    Réponses: 5
    Dernier message: 12/05/2006, 05h48
  2. Récupérer des noms de fichiers dans une table ?
    Par florus dans le forum Access
    Réponses: 5
    Dernier message: 25/03/2006, 17h34
  3. Supprimer les espaces des noms de fichier
    Par Cathy dans le forum Linux
    Réponses: 20
    Dernier message: 04/08/2005, 17h13
  4. récupérer des nom de fichiers en utilisant *.ext
    Par drinkmilk dans le forum ASP
    Réponses: 11
    Dernier message: 15/12/2004, 09h21
  5. Réponses: 4
    Dernier message: 10/10/2003, 18h04

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