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
A voir également:

23 réponses

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
est ce que le nombre de # est fixe ? 5 # et 4 #
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
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
ludo
 
ca marche pas. les fichiers ne sont pas renommés
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
il faut enlever le echo
ren %%a_%%b_%%c !f! 
0
ludo
 
hum... cela ne fait rien visiblement...
peux-tu expliquer le code ?
Merci encore pour ton aide :)
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
si, ca doit marcher, c'est l'espace qui peut être un problème, pas le -
0
ludo
 
C'est bon !
Merci pour ton aide
0
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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
la variable %%b sera toujours le premier champ de #### après source
0
ludo
 
plus exactement , je voudrais que cela fonctionne avec des fichiers "source_#####_####" aussi bien que "source_#####_####_#####_####_####"
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   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