[shell msdos] Renommer plusieurs fichiers jpg
Résolu
Hadri1
Messages postés
10
Date d'inscription
Statut
Membre
Dernière intervention
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
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%
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:
- Ajouter un préfixe à plusieurs fichiers
- Prefixe france - Guide
- Comment réduire la taille d'un fichier - Guide
- Renommer plusieurs fichiers en même temps - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment ouvrir un fichier bin ? - Guide
4 réponses
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%
mettre des "
for %%x in (*.%suffixe%) do call :modif "%%x" %prefixe% %suffixe%
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.
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.
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%
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%
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
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