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,
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.
ebut_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
ebut
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 ?