Les Allergies
Alimentaires
Posez votre question Signaler

Renommer des fichiers avec commande batch

ludo - Dernière réponse le 22 nov. 2011 à 15:03
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
Lire la suite 

Renommer des fichiers avec commande batch »

23 réponses
Réponse
+0
moins plus
hello
est ce que le nombre de # est fixe ? 5 # et 4 #
Ajouter un commentaire
Réponse
+0
moins plus
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!  
)  
Ajouter un commentaire
Réponse
+0
moins plus
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
....
Ajouter un commentaire
Réponse
+0
moins plus
ca marche pas. les fichiers ne sont pas renommés
Ajouter un commentaire
Réponse
+0
moins plus
il faut enlever le echo
ren %%a_%%b_%%c !f! 
Ajouter un commentaire
Réponse
+0
moins plus
hum... cela ne fait rien visiblement...
peux-tu expliquer le code ?
Merci encore pour ton aide :)
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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!
)
Ajouter un commentaire
Réponse
+0
moins plus
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 :)
Ajouter un commentaire
Réponse
+0
moins plus
si, ca doit marcher, c'est l'espace qui peut être un problème, pas le -
Ajouter un commentaire
Réponse
+0
moins plus
C'est bon !
Merci pour ton aide
Ajouter un commentaire
Réponse
+0
moins plus
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é ?
Ajouter un commentaire
Réponse
+0
moins plus
la variable %%b sera toujours le premier champ de #### après source
Ajouter un commentaire
Réponse
+0
moins plus
plus exactement , je voudrais que cela fonctionne avec des fichiers "source_#####_####" aussi bien que "source_#####_####_#####_####_####"
Ajouter un commentaire
Réponse
+0
moins plus
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_#####
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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:>
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Ce document intitulé « renommer des fichiers avec commande batch » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?
renommer des fichiers avec commande batch - page 2