Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1731 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Script batch de renommage de masse de fichiers

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Script batch de renommage de masse de fichiers

n°1443591
webding
Posté le 17-09-2006 à 13:24:35  profilanswer
 

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 ?

mood
Publicité
Posté le 17-09-2006 à 13:24:35  profilanswer
 

n°1443778
wackevat
Posté le 17-09-2006 à 21:38:38  profilanswer
 

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 ;)

n°1443781
webding
Posté le 17-09-2006 à 21:52:19  profilanswer
 

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

n°1443786
wackevat
Posté le 17-09-2006 à 22:12:15  profilanswer
 

C'est exactement ce que je disais :D

n°1443788
webding
Posté le 17-09-2006 à 22:15:22  profilanswer
 

je ne sais pas quoi faire

n°1443789
wackevat
Posté le 17-09-2006 à 22:18:08  profilanswer
 

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

n°1443790
webding
Posté le 17-09-2006 à 22:25:19  profilanswer
 

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.

n°1443794
wackevat
Posté le 17-09-2006 à 22:42:01  profilanswer
 

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.

n°1444218
maciew
Posté le 18-09-2006 à 16:37:42  profilanswer
 

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+

n°1444242
webding
Posté le 18-09-2006 à 17:08:11  profilanswer
 

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

mood
Publicité
Posté le 18-09-2006 à 17:08:11  profilanswer
 

n°1444246
maciew
Posté le 18-09-2006 à 17:10:15  profilanswer
 

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é.

n°1444249
webding
Posté le 18-09-2006 à 17:13:49  profilanswer
 

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

n°1444251
webding
Posté le 18-09-2006 à 17:15:08  profilanswer
 

ah, j'avais oublier setlocal enabledelayedexpansion

n°1444253
maciew
Posté le 18-09-2006 à 17:15:53  profilanswer
 

OK
Dc ça marche ?


Message édité par maciew le 18-09-2006 à 17:16:38
n°1444254
webding
Posté le 18-09-2006 à 17:18:12  profilanswer
 

Oui
 
Merci encore  :)


Message édité par webding le 18-09-2006 à 17:18:26
n°1444257
webding
Posté le 18-09-2006 à 17:21:18  profilanswer
 

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

n°1444496
maciew
Posté le 19-09-2006 à 10:12:47  profilanswer
 

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

n°1444561
wackevat
Posté le 19-09-2006 à 11:55:08  profilanswer
 

endlocal

n°1444581
webding
Posté le 19-09-2006 à 12:55:50  profilanswer
 

juste endlocal
ou variable endlocal

n°1444800
wackevat
Posté le 19-09-2006 à 17:45:28  profilanswer
 

endlocal /?

n°1444802
webding
Posté le 19-09-2006 à 17:47:15  profilanswer
 

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
n°1444833
wackevat
Posté le 19-09-2006 à 18:38:23  profilanswer
 

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.

n°1444841
webding
Posté le 19-09-2006 à 19:07:55  profilanswer
 

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

n°1444878
wackevat
Posté le 19-09-2006 à 20:30:35  profilanswer
 

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.

n°1444887
webding
Posté le 19-09-2006 à 20:55:15  profilanswer
 

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à ?

n°1444889
webding
Posté le 19-09-2006 à 20:56:55  profilanswer
 

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!

n°1444921
wackevat
Posté le 19-09-2006 à 21:52:34  profilanswer
 

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.

n°1444922
webding
Posté le 19-09-2006 à 21:55:33  profilanswer
 

ok, merci encore

n°1444924
webding
Posté le 19-09-2006 à 22:00:20  profilanswer
 

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 ?

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Script batch de renommage de masse de fichiers

 

Sujets relatifs
son dans batchCopier les fichiers des sous dossiers dans le dossier parent
Impression de fichiers à partir de page webBatch de sauvegarde FTP
Comparer des floats (script bash)[MySQL/PHP] Petit soucis de renommage de fichiers proposés en download
Récupérer dans une macro VBA la sortie d'un batch lancé en Shell[Résolu] Mon script d'ouverture de pop-up ne doit pas être bon !
Plus de sujets relatifs à : Script batch de renommage de masse de fichiers


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR