Batch - renommer

Résolu
okidoki -  
0kid0ki Messages postés 192 Statut Membre -
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

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
  2. 0kid0ki Messages postés 192 Statut Membre 8
     
    up
    0
  3. jmwurth Messages postés 2622 Date d'inscription   Statut Membre Dernière intervention   863
     
    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
    0
    1. 0kid0ki Messages postés 192 Statut Membre 8
       
      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 ^^
      0
  4. jmwurth Messages postés 2622 Date d'inscription   Statut Membre Dernière intervention   863
     
    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
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    peut on voir un exemple des noms de fichier avant et après
    0
    1. 0kid0ki Messages postés 192 Statut Membre 8
       
      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
      0
  7. 0kid0ki Messages postés 192 Statut Membre 8
     
    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 ^^)
    0