[shell msdos] Renommer plusieurs fichiers jpg

Résolu/Fermé
Hadri1 Messages postés 10 Date d'inscription dimanche 17 juin 2007 Statut Membre Dernière intervention 29 juin 2008 - 17 juin 2007 à 19:33
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 19 juin 2007 à 10:13
Voilà j'ai ce shell dos que j'ai écrit il y a un an, il a pour but de changer le nom de l'ensemble des fichiers d'une extension donnée dans le répertoire courant par un nom donné suivi d'un chiffre incrémenté à chaque fois.

Par exemple dans mon répertoire j'ai:

froufrou.jpg
tralala.jpg
youpi.avi

En tapant "renommer photo jpg", je devrais avoir dans mon répertoire:

photo1.jpg
photo2.jpg
youpi.avi

Sauf que le bougre refuse de marcher. Le message d'erreur est "Fichier spécifié introuvable" et est affiché autant de fois qu'il y a de fichier de l'extension passée en paramètre. Je sais qu'il existe des moyens tout prêts pour faire ce genre d'opération, c'est pour satisfaire ma curiosité que je cherche à résoudre ce problème. Merci d'avance.

@echo off

set nb=0
set prefixe=%1%
set suffixe=%2%


if "%prefixe%"=="" (
echo Il manque un prefixe...
goto :eof
)

if "%suffixe%"=="" (
echo Il manque un suffixe...
goto :eof
)


for %%x in (*.%suffixe%) do call :modif %%x %prefixe% %suffixe%


if %nb%==0 (
echo Aucun fichier ne porte cette extension
goto :eof
) else (
goto :eof
)


:modif
set /a nb+=1
set nom=%1%
set pref=%2%
set suff=%3%
ren %nom% %pref%%nb%.%suff%
A voir également:

4 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
18 juin 2007 à 13:44
Chez moi, il fonctionne. le problème c'est les noms de fichiers avec espace.
mettre des "
for %%x in (*.%suffixe%) do call :modif "%%x" %prefixe% %suffixe%
1
Hadri1 Messages postés 10 Date d'inscription dimanche 17 juin 2007 Statut Membre Dernière intervention 29 juin 2008 1
18 juin 2007 à 20:13
En effet Dubcek, les guillemets resolvent le problème, quoi que je ne comprenne pas vraiment pourquoi.

Taz, est-ce qu'il serait possible d'avoir les conclusions de la personne avec qui tu t'es penché sur mon problème? Je ne vois pas ce qui peut faire la différence entre ta version et la mienne, il n'y a que des paramètres que je passe en plus dans la fonction modif et une petite gestion des erreurs, je ne pense pas que ça vienne de là.

Merci à vous deux.
1
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
19 juin 2007 à 10:13
Si ton fichier s'apelle a<blanc>b.jpg DOS va passer,
parce que le blanc est le séparateur d'éléments:
for %%x in (*.%suffixe%) do call :modif a b.jpg %prefixe% %suffixe%

donc %1 = a, %2 = b.jpg
avec les guillemets, %1="a<blanc>b.jpg", %2 = %prefixe%
1
bonjour,

après discussion sur ton message avec un spécialiste, il en est arrivé à la conclusion que ton batch ne peut pas fonctionner sur de nbx points.
Voici une courte version qui fonctionne :

@echo off
cls
rem On se situe dand le repertoire d execution du batch ...
rem On veut renommer tous les fichiers dont l extension est passee en parametre positionnel 2
rem par le prefixe qui est passe en parametre positionnel 1, avec un compteur incremental ...

if "%1"=="" echo Pas de parametres en entree de ce batch ...

set Compteur=0
set prefixe=photo
set suffixe=jpg

for %%x in (*.%suffixe%) do call :modif %%x
goto Fin

:modif
set /a Compteur+=1
rename %1 %prefixe%%Compteur%.%suffixe%
goto :eof

:Fin
0