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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  boucle en batch

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

boucle en batch

n°1772538
coolkis
Posté le 12-08-2008 à 15:14:17  profilanswer
 

Bonjour,
 
J'ai un script nommé par exemple script.bat avec un ou plusieurs fichiers passés en paramètre !
Ce qui nous donne : script.bat fic1 fic2 fic3
Le nombre de fichiers passés en paramètre est aléatoire !
 
Je voudrai dans un premier temps lister l'ensemble des fichiers passés en paramètre afin de savoir s'ils existent !
Et dans un deuxième temps, si tous les fichiers sont présent, les horodater !
 
J'ai donc une première boucle qui liste l'ensemble des fichiers d'un répertoire et un fait test d'existence de ces fichiers.
 
:debut_boucle
IF "%2"=="" GOTO horodatage
set fic=%2
SHIFT
 
set /a nbParams+=1
     if not exist "%rep%\%fic%" (
     echo Le fichier %fic% n'existe pas ! >>%LOG%
     goto fin_erreur
     )
goto debut_boucle
 
Si tout les fichiers existent je voudrais dans une deuxième boucle les horodater d'où le GOTO horodatage
 
:horodatage
:debut
IF "%2"=="" GOTO fin_boucle
set fic=%2
 
SHIFT
set /a nbParams+=1
 
set datetime=%date:~6,4%%date:~3,2%%date:~0,2%%time:~0,2%%time:~3,2%%time:~6,2%
rename %rep%\%fic% %datetime%_%fic%
 
goto debut
:fin_boucle
 
Le problème est que cette deuxième boucle ne fonctionne absolument pas ! Je n'arrive pas à récupérer la liste de fichiers passés en paramètre !
Quelqu'un aurait il une petite idée pour résoudre mon problème ?

mood
Publicité
Posté le 12-08-2008 à 15:14:17  profilanswer
 

n°1772561
h4rold
Posté le 12-08-2008 à 16:06:25  profilanswer
 

Ne jamais faire des GOTO ou autres joyeusetés de l'assembleur en batch.

Code :
  1. #!/bin/bash
  2. for argument in $*
  3. do
  4.   echo $argument
  5. done


T'affichera chacun des arguments passés en entrée.
 

n°1772566
coolkis
Posté le 12-08-2008 à 16:12:45  profilanswer
 

Merci H4rold pour ta réponse mais je suis sous dos !

n°1772568
h4rold
Posté le 12-08-2008 à 16:14:04  profilanswer
 

coolkis a écrit :

Merci H4rold pour ta réponse mais je suis sous dos !


 
Oups pardon j'ai lu beaucoup trop vite.
Il n'y a pas de boucles en DOS ? Parceque les gotos c'est tendu quand même.

n°1772570
coolkis
Posté le 12-08-2008 à 16:19:16  profilanswer
 

Si bien sur ! Il existe aussi la boucle FOR sous dos. C'est juste que je ne vois pas comment résoudre mon problème avec cette solution !!!!

n°1772573
h4rold
Posté le 12-08-2008 à 16:25:48  profilanswer
 

coolkis a écrit :

Si bien sur ! Il existe aussi la boucle FOR sous dos. C'est juste que je ne vois pas comment résoudre mon problème avec cette solution !!!!


 
Y'a pas l'équivalent du $# en Dos qui compte le nombre d'argument en entrée ? (le for du Bash linux est un foreach et non un for, c'est pour cela que ca marche en bash)

n°1772625
coolkis
Posté le 12-08-2008 à 18:08:41  profilanswer
 

Voici le code final pour ceux que ça intéresse :
 
: debut_boucle
IF "%2"=="" GOTO horodatage
set fic=%2
set arg=%arg% %2
 
SHIFT
set /a nbParams+=1
     if not exist "%fic%" (
     goto fin_erreur
     )
goto debut_boucle
 
:horodatage
set datetime=%date:~6,4%%date:~3,2%%date:~0,2%%time:~0,2%%time:~3,2%%time:~6,2%
for %%i in (%arg%) do (
     rename %%i %datetime%_%%i
)
goto fin_correct

n°1772631
blastkille​r
Posté le 12-08-2008 à 18:31:48  profilanswer
 

J'codais pendant que tu postais la réponse.
Mon code continue meme si un fichier n'existe pas, sans le prendre en compte pour l'horodatage.
 

Code :
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set rep=C:\test
  4. set acc=0
  5. set acc1=0
  6. if "%1"=="" echo Vous devez specifier des fichiers& pause& goto fin
  7. :verif
  8. if "%1"=="" goto horodatage
  9. if not exist "%rep%\%1" echo Le fichier "%1" n'existe pas& shift& goto verif
  10. set /a acc+=1
  11. set fic%acc%="%1"
  12. shift
  13. goto verif
  14. :horodatage
  15. set /a acc1+=1
  16. set datetime=%date:~6,4%%date:~3,2%%date:~0,2%%time:~0,2%%time:~3,2%%time:~6,2%
  17. rename %rep%\!fic%acc1%! %datetime%_!fic%acc1%!
  18. if not %acc% EQU %acc1% goto horodatage
  19. pause
  20. :fin
  21. endlocal

n°1772785
coolkis
Posté le 13-08-2008 à 10:37:30  profilanswer
 

Salut BlastKiller,
 
voici mon code complet :
 
set rep=%1
set /A nbParams=0
 
: debut_boucle
IF "%2"=="" GOTO horodatage
set fic=%2
set arg=%arg% %2
 
SHIFT
set /a nbParams+=1
     if not exist "%rep%\%fic%" (
     echo Le fichier %fic% n'existe pas !
     goto fin_erreur
     )
goto debut_boucle
 
:horodatage
set datetime=%date:~6,4%%date:~3,2%%date:~0,2%%time:~0,2%%time:~3,2%%time:~6,2%
for %%i in (%arg%) do (
     rename %rep%\%%i %datetime%_%%i
     echo "Horodatage du fichier %%i -> %datetime%_%%i" >>%LOG%
)
goto fin_correct
 
si tu as des question n'hésites pas !!


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

  boucle en batch

 

Sujets relatifs
batch de recherche / suppressionUn petit batch avec boucle / Call / parametre et condition
[Batch] Problème de variable dans boucle for[batch DOS] boucle if qui ne trouve pas le fichier
Boucle dans un batch[batch]inventaire réseau-problème de boucle "for"
[Batch] Boucle sur plusieurs fichiers - RESOLUBoucle sans fin en Batch
une boucle dans un batch ?[Batch DOS] Générer une séquence de nombre pour une boucle...
Plus de sujets relatifs à : boucle en batch


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