pb caracteres joker dans un batch windows

pb caracteres joker dans un batch windows - Shell/Batch - Programmation

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
Reply

Marsh Posté le 21-04-2006 à 12:11:18   

Reply

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.

Reply

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é,  :sweat:  
il me manque quelque chose, ou c'est pas ce que tu voulais dire ???


Message édité par wamdk le 24-04-2006 à 10:46:11
Reply

Marsh Posté le 24-04-2006 à 12:27:59    

Si, c'est bien ce que je voulais dire, algorithmiquement :D
 
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.

Reply

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 !!!

Reply

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 :
  1. for ... do (
  2.   set comp=...
  3.   call :process
  4. )
  5. goto end
  6. :process
  7. if ...
  8. :end


ou  
 

Code :
  1. for ... do (
  2.   call :process %%A
  3. )
  4. goto end
  5. :process
  6. set comp=%1
  7. if ...
  8. :end

Reply

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é

Message cité 2 fois
Message édité par wamdk le 24-04-2006 à 13:29:59
Reply

Marsh Posté le 24-04-2006 à 14:03:19    

help au secours

Reply

Marsh Posté le 24-04-2006 à 14:49:54    

wamdk a écrit :

: process
if "%comp:~0,8%" == "%newdate%" copy %%A c:\titi\recup-%newdate%.txt  


 
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 :
  1. if "%comp:~0,8%" == "%newdate%" copy %%A c:\titi\recup-%newdate%%comp:~8%.txt


 
edit correction :
 

Code :
  1. if "%comp:~0,8%" == "%newdate%" copy %%A c:\titi\recup-%newdate%%comp:~8%


 
ou alors tu garde le code du dessus mais tu ne selectionne dans ton comp que le nom de fichier :
set comp=%%~nA
 
 


Message édité par PepMat le 24-04-2006 à 14:56:46
Reply

Marsh Posté le 24-04-2006 à 15:44:58    

wamdk a écrit :

: process
if "%comp:~0,8%" == "%newdate%" copy %%A c:\titi\recup-%newdate%.txt


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.

Reply

Marsh Posté le 24-04-2006 à 15:44:58   

Reply

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é


Message édité par wamdk le 24-04-2006 à 16:09:00
Reply

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  

Reply

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 :
  1. donc, tu mets ':process' à la place de ': process'
  2. et 'call :process' à la place de 'call: process'


 
edit : de plus prend en compte ce que nglechau t'as dit ci dessus.
edit2 : arf saletés de smileys !


Message édité par PepMat le 24-04-2006 à 16:14:01
Reply

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 !!!

Reply

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed