Renommer des fichiers avec commande batch

Fermé
ludo - 16 nov. 2011 à 11:54
 ludo - 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
A voir également:

23 réponses

dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
16 nov. 2011 à 15:15
hello
est ce que le nombre de # est fixe ? 5 # et 4 #
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
Modifié par dubcek le 16/11/2011 à 15:31
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
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
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 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
17 nov. 2011 à 07:47
il faut enlever le echo
ren %%a_%%b_%%c !f! 
0
hum... cela ne fait rien visiblement...
peux-tu expliquer le code ?
Merci encore pour ton aide :)
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
18 nov. 2011 à 10:19
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
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 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
Modifié par dubcek le 21/11/2011 à 08:16
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 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
21 nov. 2011 à 09:33
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
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 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
21 nov. 2011 à 11:00
si, ca doit marcher, c'est l'espace qui peut être un problème, pas le -
0
C'est bon !
Merci pour ton aide
0
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 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
21 nov. 2011 à 14:46
la variable %%b sera toujours le premier champ de #### après source
0
plus exactement , je voudrais que cela fonctionne avec des fichiers "source_#####_####" aussi bien que "source_#####_####_#####_####_####"
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
21 nov. 2011 à 16:16
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
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 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
22 nov. 2011 à 07:58
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 mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 131
22 nov. 2011 à 11:14
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