Batch - renommer

[Résolu/Fermé]
Signaler
-
Messages postés
174
Date d'inscription
mercredi 18 janvier 2012
Statut
Membre
Dernière intervention
6 mars 2014
-
Bonjour,
je poste ici car j'avais dans l'idée de renommer les photos de mes vacs en un nom un peu plus explicite.
problème mon .bat ne veut pas.

j'ai un petit souci, voila mon code simplifié pour les photos 1 à 9 :

-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-<gras>

@echo off
set cpt=1
set fichier=photo
set nomFutur=vacances_ete_2011
:Pour_cpt_de_1_a_9
	pause
        set cheminJPG=%CD%\*%fichier%*0%cpt%*.jpg
        set cheminGIF=%CD%\*%fichier%*0%cpt%*.gif
	if exist %cheminJPG% ( rename %cheminJPG% %nomFutur%-0%cpt%.jpg )
        if exist %cheminGIF% ( rename %cheminGIF% %nomFutur%-0%cpt%.gif )
	set %cpt%=%cpt% + 1
	if %cpt% >= 9 goto fin
        goto Pour_cpt_de_1_a_9

:fin
	echo Fin...
	pause >NUL

-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-

Et Voici ce qu'il me réponds :
*01*.jpg était inattendu.


6 réponses

Messages postés
18247
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
2 août 2021
5 333
enlever le echo devant le rename pour effetuer le rename
C:> dir /b
MyPhoto_001.gif
MyPhoto_002.jpg

C:> ..\bb
rename MyPhoto_001.gif vacances_ete_2011-001.gif
rename MyPhoto_002.jpg vacances_ete_2011-002.jpg
Fin...

C:> cd ..

C:> type bb.bat
@echo off
setlocal enableDelayedExpansion
set fichier=photo
set nomFutur=vacances_ete_2011
set CD=.
for /F "delims=" %%a in ('dir /b %CD%\*%fichier%*.gif %CD%\*%fichier%*.jpg') do (
        for /f "delims=_ tokens=1,2" %%b in ('echo %%a') do (
                set c=%%c
                echo rename %%a %nomFutur%-!c!
        )
)
        echo Fin...
        pause >NUL
C:>
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
174
Date d'inscription
mercredi 18 janvier 2012
Statut
Membre
Dernière intervention
6 mars 2014
9
up
Messages postés
2923
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
23 juin 2013
832
Bonjour,
La commande set sert à fixer les variables d'environnement . Le programme se termine généralement par l'annulation de la variable par exemple par
set variable=
Le programme ne comprend pas d'où viennent les *. D'autre par, il manque une commande for
Je crains que peu de batcheurs fous, comme il en existait dans les années 80-90, aient envie d"explorer ce programme
Messages postés
174
Date d'inscription
mercredi 18 janvier 2012
Statut
Membre
Dernière intervention
6 mars 2014
9
pour le fait que le script ne comprenne pas d'où viennent les * j'avais compris mais ce que je voudrais savoir c'est comment faire en sorte qu'il comprenne d'où ils viennent

PS : mon système d'étiquette revient aux même qu'un for ^^
Messages postés
2923
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
23 juin 2013
832
En fait, la commande set peut s'utiliser pour initialiser une variable, mais par la suite, dans la boucle, il ne faut plus la prendre, mais l'instruction reste obscure
Messages postés
18247
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
2 août 2021
5 333
hello
peut on voir un exemple des noms de fichier avant et après
Messages postés
174
Date d'inscription
mercredi 18 janvier 2012
Statut
Membre
Dernière intervention
6 mars 2014
9
eh bien j'ai un fichier du style :
machinPhototruc002blabla.jpg

ou (exemple concret) :
MyPhoto_002.jpg

et je veux à la fin :
vacances_ete_2011-002.jpg


Mais j'ai utilisé plusieurs appareils donc les photos n'ont pas du tout été nommé selon le même modèle il faudrait que mon programme s'adapte
Messages postés
174
Date d'inscription
mercredi 18 janvier 2012
Statut
Membre
Dernière intervention
6 mars 2014
9
Alors merci dubcek
Grâce à toi j'ai put avoir un résultat proche de ce que je voulais

Donc j'ai modifié ce que tu as fait pour pouvoir moduler complétement le prog via des variables d'environnement :

@echo off

:Initialisation
setlocal enableDelayedExpansion
:: rentrez ici le nom commun à tous les fichiers à modifier
set fichier=photo
:: rentrez ici le nom des fichiers après modification
set nomFutur=vacance_ete_2011
:: rentrez ici le séparateur entre le nom du fichier et le numéro
set sep="_"
set sep=%sep:1%
:: rentrez ici l'extension de votre fichier
set ext=jpg
:: rentrez ici l'emplacement des fichiers (mettre . si dans le même fichier que le '.bat')
set CD=.

:Debut
	for /F "delims=" %%a in ('dir /b %CD%\*%fichier%*.%ext%') do (
		for /f "delims=%sep% tokens=1,2" %%b in ('echo %%a') do (
			set c=%%c
			rename %%a %nomFutur%-%%c.%ext%
		)
	)
	
:Fin
	echo Fin...
	pause >NUL


Voili voulou pour ceux qui le veulent (il doit pas y en avoir beaucoup ^^)