boucle en batch - Shell/Batch - Programmation
Marsh Posté le 12-08-2008 à 16:06:25
Ne jamais faire des GOTO ou autres joyeusetés de l'assembleur en batch. 
| Code : 
 | 
 
T'affichera chacun des arguments passés en entrée. 
 
Marsh Posté le 12-08-2008 à 16:12:45
ReplyMarsh Posté le 12-08-2008 à 16:14:04
| 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. 
Marsh Posté le 12-08-2008 à 16:19:16
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 !!!!
Marsh Posté le 12-08-2008 à 16:25:48
| 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)
Marsh Posté le 12-08-2008 à 18:08:41
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 
Marsh Posté le 12-08-2008 à 18:31:48
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 : 
 | 
Marsh Posté le 13-08-2008 à 10:37:30
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 !!
Marsh Posté le 12-08-2008 à 15:14:17
Bonjour,
 ebut_boucle
ebut_boucle 
 ebut
ebut 
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.
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
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 ?