Script batch de renommage de masse de fichiers

Script batch de renommage de masse de fichiers - Shell/Batch - Programmation

Marsh Posté le 17-09-2006 à 13:24:35    

Bonjour, j'ai un script sensé renommer en masse des fichiers:
 

Code :
  1. set i=0
  2. for /f "delims=" %%a in ('dir "C:\Mes Documents\toto\titi\tata\*.jpg" /b') do call :commande "%%a"
  3. set i=
  4. :commande
  5. set valeur=%1
  6. set /a i=%i%+1
  7. ren %valeur% img%i%.jpg

Mais il ne fonctionne pas, sauriez vous m'aider à aranger ça ?

Reply

Marsh Posté le 17-09-2006 à 13:24:35   

Reply

Marsh Posté le 17-09-2006 à 21:38:38    

Fais une pause pour lire l'erreur renvoyée.
 
A mon avis, comme le chemin complet des fichiers n'est pas fourni, ren n'a pas trouvé les fichiers à renommer.
 
Sinon :  
set /a i+=1
marche très bien ;)

Reply

Marsh Posté le 17-09-2006 à 21:52:19    

C'est la commande ren, qui dit que le fichiers spécifié est introuvable à chaque fichier

Reply

Marsh Posté le 17-09-2006 à 22:12:15    

C'est exactement ce que je disais :D

Reply

Marsh Posté le 17-09-2006 à 22:15:22    

je ne sais pas quoi faire

Reply

Marsh Posté le 17-09-2006 à 22:18:08    

Bah, j'avais donné la réponse : il fallait le chemin complet pour chacun des fichiers ;)

Reply

Marsh Posté le 17-09-2006 à 22:25:19    

Ben j'ai fait ça:

Code :
  1. echo  set VrCompteur=> "%~dp0renamMass.bat"
  2.      echo  echo %%%%i>> "%~dp0renamMass.bat"
  3.      echo  set /a VrCompteur=+1>> "%~dp0renamMass.bat"
  4.      echo  ren "%%dp~1\%%%%i" "%%~dp1\img%VrCompteur%.jpg">> "%~dp0renamMass.bat"
  5. for /f "delims=" %%i in ('dir /b "%~1\*.*"') do call "%~dp0renamMass.bat"


Et maintenant l'erreur dit:
La syntaxe de la commande est incorrecte.

Reply

Marsh Posté le 17-09-2006 à 22:42:01    

Enlève echo off pour identifier la ligne erronée.
 
Mais tu compliques la vie là : il suffisait de compléter le chemin des fichiers.

Reply

Marsh Posté le 18-09-2006 à 16:37:42    

Salut,
 

Code :
  1. setlocal enabledelayedexpansion
  2. set /A i=0
  3. for /R "c:\toto" %%i in (*.jpg) do (
  4. ren %%~fi img!i!.jpg
  5. set /a i=i+1
  6. )


 
Ca renomme uniquement les .jpg en partant de img1 .... imgi
 
A+

Reply

Marsh Posté le 18-09-2006 à 17:08:11    

Bonjour et merci beacoup
 
Ca fonctionne chez toi ?
Parce que chez moi non

Reply

Marsh Posté le 18-09-2006 à 17:08:11   

Reply

Marsh Posté le 18-09-2006 à 17:10:15    

yess ça fonctionne !!! pourtant y'a rien de compliqué là.
Tu as bien changé le chemin c:\toto par le tiens ?
Tes extensions sont .jpg et pas .jpeg ?
 
Sinon quelle est l'erreur renvoyé.

Reply

Marsh Posté le 18-09-2006 à 17:13:49    

Ah, non j'ai pas vu, voilà j'ai ratraper:

Code :
  1. set /A i=0
  2. for /R "%~1\" %%i in (*.jpg) do (
  3.     ren "%%~fi" "img!i!.jpg"
  4.     set /a i=i+1
  5. )


Avec ça il me renomme une image img!i!.jpg
Et c'est tout

Reply

Marsh Posté le 18-09-2006 à 17:15:08    

ah, j'avais oublier setlocal enabledelayedexpansion

Reply

Marsh Posté le 18-09-2006 à 17:15:53    

OK
Dc ça marche ?


Message édité par maciew le 18-09-2006 à 17:16:38
Reply

Marsh Posté le 18-09-2006 à 17:18:12    

Oui
 
Merci encore  :)


Message édité par webding le 18-09-2006 à 17:18:26
Reply

Marsh Posté le 18-09-2006 à 17:21:18    

Mais au fait, comment fait on pour annuler setlocal enabledelayedexpansion ?

Reply

Marsh Posté le 19-09-2006 à 10:12:47    

pourquoi l'annuler ?? mais en réfléchissant un peu --> enable / disable

Reply

Marsh Posté le 19-09-2006 à 11:55:08    

endlocal

Reply

Marsh Posté le 19-09-2006 à 12:55:50    

juste endlocal
ou variable endlocal

Reply

Marsh Posté le 19-09-2006 à 17:45:28    

endlocal /?

Reply

Marsh Posté le 19-09-2006 à 17:47:15    

Donc c'est pas vraiment utilile de mettre endlocal ?
 
Par ce que j'ai mis les script dans un batch ou il y a d'autre scripts, ça ne poserat pas de probléme pour mes variables ?


Message édité par webding le 19-09-2006 à 17:48:09
Reply

Marsh Posté le 19-09-2006 à 18:38:23    

Si tu appelles le script en double-cliquant dessus, ça n'affecte pas ton environement.
 
Par contre, si tu l'appelles depuis une invite, il est recommandé d'initialiser les variables localement, c'est-à-dire commencer le script par un setlocal et terminer par un endlocal.
 
D'autres couples setlocal/endlocal peuvent être utilisés au long du script si nécessaire de modifier les réglages de l'environement.

Reply

Marsh Posté le 19-09-2006 à 19:07:55    

Donc setlocal  n'est pas néccésaire pour le fonctionnement le la boucle dans mon batch alor ?

Reply

Marsh Posté le 19-09-2006 à 20:30:35    

Ca dépend de comment est configuré l'environement dans lequel il est lancé.
 
Bref, faut que tu relises l'aide de la commande setlocal et l'utilité de ses params.

Reply

Marsh Posté le 19-09-2006 à 20:55:15    

Ben dans tout mes batch je créer des variable style:
 

Code :
  1. set Variable=Chemin du répertoire ou fichier ou bien encore ligne de commande

Que j'utilise comme suit:

Code :
  1. %vriable%

Je n'avais jammais entrer setlocal mais cette forme de variable à toujours fonctionner
Mais dans les boucle For il y a un sytéme d'expension de variable que je n'ai jamais réussi à piger, dans la boucle que tu ma filer tu appele la varible comme ça:

Code :
  1. !i!

Donc je me demande si le setlocal/endloca sert uniquement dans ce case là ?

Reply

Marsh Posté le 19-09-2006 à 20:56:55    

Ce que je pige pas c'est si le setlocale est indispensable pour que les variable sous la forme suivante dans les boucle for:

Code :
  1. !i!

Reply

Marsh Posté le 19-09-2006 à 21:52:34    

Non, ça ce n'est pas setlocal tout court mais  
setlocal ENABLEDELAYEDEXPANSION
c'est pourquoi je t'ai recommandé de relire l'aide de setlocal.
 
Fais aussi
set /?
où cette option est expliquée et des exemples sont donnés.
 
Et comme je disais, cette commande est nécessaire ou pas, ça dépend de comment ton invite de commandes est configurée à la base. Si tu veux qu'un script soit portable, il est recommandé de le commencer par définir son environnement d'exécution.

Reply

Marsh Posté le 19-09-2006 à 21:55:33    

ok, merci encore

Reply

Marsh Posté le 19-09-2006 à 22:00:20    

Il y a un truc que je ne comprends pas dans l'aide de setlocal:
 

Citation :

Cela marche, car sur les anciennes versions de CMD.EXE, SETLOCAL NE fixe PAS
la valeur de ERRORLEVEL. La commande VERIFY avec un argument non valide
initialise ERRORLEVEL à une valeur non nulle.


 
setlocal ENABLEDELAYEDEXPANSION  pourait annuler les errorlevel ?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed