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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  pb caracteres joker dans un batch windows

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

pb caracteres joker dans un batch windows

n°1351110
wamdk
Posté le 21-04-2006 à 12:11:18  profilanswer
 

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
mood
Publicité
Posté le 21-04-2006 à 12:11:18  profilanswer
 

n°1351591
wackevat
Posté le 21-04-2006 à 21:01:51  profilanswer
 

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.

n°1352544
wamdk
Posté le 24-04-2006 à 10:43:52  profilanswer
 

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
n°1352625
wackevat
Posté le 24-04-2006 à 12:27:59  profilanswer
 

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.

n°1352637
wamdk
Posté le 24-04-2006 à 12:53:19  profilanswer
 

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

n°1352639
wackevat
Posté le 24-04-2006 à 13:03:27  profilanswer
 

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

n°1352653
wamdk
Posté le 24-04-2006 à 13:29:09  profilanswer
 

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
n°1352676
wamdk
Posté le 24-04-2006 à 14:03:19  profilanswer
 

help au secours

n°1352721
PepMat
Posté le 24-04-2006 à 14:49:54  profilanswer
 

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
n°1352801
wackevat
Posté le 24-04-2006 à 15:44:58  profilanswer
 

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.

mood
Publicité
Posté le 24-04-2006 à 15:44:58  profilanswer
 

n°1352820
wamdk
Posté le 24-04-2006 à 16:08:43  profilanswer
 

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
n°1352823
wamdk
Posté le 24-04-2006 à 16:12:08  profilanswer
 

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  

n°1352824
PepMat
Posté le 24-04-2006 à 16:12:11  profilanswer
 

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
n°1352833
wamdk
Posté le 24-04-2006 à 16:22:30  profilanswer
 

mais justement, j'ai mis les espaces à cause de la saleté de smileys, dans mon code il n'y sont pas !!!

n°1352853
PepMat
Posté le 24-04-2006 à 16:38:58  profilanswer
 

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.


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

  pb caracteres joker dans un batch windows

 

Sujets relatifs
Caractères possibles à écrire sur une userformVariable en batch
[API windows]CheckBox.htaccess serveur windows
[.NET] Appli windows, pocketpc etc. avec 1 seul source ?PID d'un Processus sous Windows
batch: pb pour modifier fichier et ecrire dans un fichierCOM et WMI pour acceder a la base SAM de windows server 2003 std
CreateObject depuis un service windows[JAVA] Lecture dans de fichier de N caractères
Plus de sujets relatifs à : pb caracteres joker dans un batch windows


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