pb caracteres joker dans un batch windows - Shell/Batch - Programmation
Marsh Posté le 21-04-2006 à 21:01:51
Effectivement, le wildcard n'est pas accepté.
Par contre %VAR:~x,y% extrait y caractères à partir de la position x de la chaîne %VAR%, l'index commence de 0.
set /?
pour plus d'infos.
Marsh Posté le 24-04-2006 à 10:43:52
for /f "tokens=1-3 delims=/" %%a in ( "%date%" ) do set newdate=%%c%%b%%a
FOR %%A IN (c:\toto\*.*) DO (
set comp=%%~nxA
if "%comp:~0,8%" == "%newdate%" copy %%A c:\titi\recup-%newdate%.txt)
c'est mon dernier essai raté,
il me manque quelque chose, ou c'est pas ce que tu voulais dire ???
Marsh Posté le 24-04-2006 à 12:27:59
Si, c'est bien ce que je voulais dire, algorithmiquement
Par contre, ce n'est pas comme ça qu'il fallait écrire. Si tu fais :
set /?
et lis le paragraphe qui parle de l'expansion retardée des variables d'environnement, tu comprendras pourquoi après le
set comp=
%comp% est toujours vide (un echo %comp% te le confirmera).
Fais une recherche sur le forum, j'ai déjà répondu à ce sujet à plusieurs reprises.
Marsh Posté le 24-04-2006 à 12:53:19
j'ai bien lu dans la doc expansion retardée, j'ai vu les !var!, mais quelle plaie à utiliser.
le parcours du forum me montre hélas que je ne suis pas le seul à galérer avec ce langage et une logique étrange. Et pourtant je suis obligé de l'utiliser !!!
Marsh Posté le 24-04-2006 à 13:03:27
Tu peux éviter l'usage des ! en appelant une procédure. Il y a deux manières de le faire :
Code :
|
ou
Code :
|
Marsh Posté le 24-04-2006 à 13:29:09
for /f "tokens=1-3 delims=/" %%a in ( "%date%" ) do set newdate=%%c%%b%%a
FOR %%A IN (c:\toto\*.*) DO (
set comp=%%~nxA
call: process
)
goto end
: process
if "%comp:~0,8%" == "%newdate%" copy %%A c:\titi\recup-%newdate%.txt
:end
la comparaison a l'air de se faire mais uniquement sur le premier fichier rencontré
Marsh Posté le 24-04-2006 à 14:49:54
wamdk a écrit : : process |
Si tu ne veux pas que ton fichier résultat sont écrasé à chaque occurence du for,
il faut que le nom de fichier de sortie diffère à chaque fois :
Code :
|
edit correction :
Code :
|
ou alors tu garde le code du dessus mais tu ne selectionne dans ton comp que le nom de fichier :
set comp=%%~nA
Marsh Posté le 24-04-2006 à 15:44:58
wamdk a écrit : : process |
En dehors de la boucle for, tu ne peux plus appeler %%A, il faut utiliser une autre variable pour ou le passer en argument de la procédure.
Marsh Posté le 24-04-2006 à 16:08:43
oui, c'est vrai que je dois mettre un nouveau nom de fichier à chaque sortie.
Mais j'ai quand meme le message d'erreur suivant :
set comp=2006042400.txt
call: process)
le systeme ne peut pas trouver le fichier de commande -
et mon fichier (il n'y en a qu'un) n'est pas copié
Marsh Posté le 24-04-2006 à 16:12:08
Revoici mon code modifié comme tu me l'as suggéré :
for /f "tokens=1-3 delims=/" %%a in ("%date%" ) do set newdate=%%c%%b%%a
FOR %%A IN (c:\toto\*.*) DO (
set comp=%%~nxA
call: process
)
goto end
: process
if "%comp:~0,8%" == "%newdate%" copy %%A c:\titi\recup-%newdate%%comp:~8%
:end
Marsh Posté le 24-04-2006 à 16:12:11
Fait attention aux espaces :
Pour une étiquette , essaye de ne pas mettre d'espaces entre les ':' et le nom de l'étiquette.
Code :
|
edit : de plus prend en compte ce que nglechau t'as dit ci dessus.
edit2 : arf saletés de smileys !
Marsh Posté le 24-04-2006 à 16:22:30
mais justement, j'ai mis les espaces à cause de la saleté de smileys, dans mon code il n'y sont pas !!!
Marsh Posté le 24-04-2006 à 16:38:58
wamdk a écrit : mais justement, j'ai mis les espaces à cause de la saleté de smileys, dans mon code il n'y sont pas !!! |
Dans ce cas là met toujours ton code entre balises codes :
ex :
[ code ] ton code [ /code ] (sans les espaces)
et regarde ce que t'as marqué nglechau.
Marsh Posté le 21-04-2006 à 12:11:18
Bonjour,
je cherche à copier tous les fichiers de mon repertoire toto qui commencent par 20060421 (date du jour inversée) dans un repertoire titi en les renommant "recup-20060421..." ou "..." est la fin du nom de chaque fichier
exemple : un fichier "20060421999.txt" du repertoire toto sera copié dans le repertoire titi avec le nom "recup-20060421999.txt"
ma syntaxe batch sous windows )
for /f "tokens=1-3 delims=/" %%a in ( "%date%" ) do set newdate=%%c%%b%%a
FOR %%A IN (c:\toto\*.*) DO if "%%~nxA" == "%newdate%*.txt" copy %%A c:\titi\recup-%newdate%.txt
ne marche pas, bien sur, car je ne sais pas comment lui indiquer de prendre les caractères apres la date !!!
le caractère "*" semble ne pas fonctionner...
Merci de votre aide...
Message édité par wamdk le 21-04-2006 à 19:43:28