[Résolu] Trouve un nom dans un fichier et en faire une copie

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

Répondre
med1974
Batcheur occasionnel
Messages : 3
Enregistré le : 24 mars 2008 14:31

[Résolu] Trouve un nom dans un fichier et en faire une copie

Message par med1974 »

Bonjour A tous,
Voila, je voudrai créer un fichier Batch qui sert a : trouver un mot ex: daniel dans plusieurs fichiers de nom (l-000-msg2*.txt) qui se trouvent dans des répertoires sous le nom (20080223) la date du jour. si le nom daniel est trouvé je fait une copie de sauvegarde de ce fichier.


Merci de votre contribution

Mes salutations
Avatar du membre
flox
Administrateur du site
Messages : 158
Enregistré le : 18 janv. 2008 22:05

Re: Trouve un nom dans un fichier puis faire la sauvegarde de ce

Message par flox »

Bonjour,

Si j'ai bien compris, je pense que ce script devrait faire ce que tu souhaite

Arborescence

-C:\
----BAK
----REP
--------20080223
--------------------l-000-msg1.txt
---------------------------|Daniel marc
--------------------l-000-msg2.txt
---------------------------| antoine sebastien
--------20080224
--------------------l-001-msg1.txt
---------------------------| fabien laurent
--------------------l-002-msg2.txt
---------------------------| jules Daniel


fichier c:\test.bat

Code : Tout sélectionner

@echo off

rem efface les fichiers temporaire
del c:\temp.txt
del c:\listrep.txt

rem enregisrte dans le fichier listrep.txt le nom de tous les repétoire du dossier c:\rep
dir c:\rep /ad | find "REP" | find  "." /V > c:\listrep.txt

rem pour tous les fichiers contenue dans les repertoires précedement selectionnée
rem trouver les fichiers conteant "Daniel" et ecrire le resultat dans temp.txt
for /f "tokens=4 delims= " %%a in (c:\listrep.txt) do (find c:\rep\%%a\* "daniel" /C >> c:\temp.txt)


setlocal enableDelayedExpansion
rem pour tous les fichier dans temp.txt si il contient Daniel alors copie vers le rep c:\bak
for /f "tokens=2,3 delims= " %%a in (c:\temp.txt) do (
set var1=%%a
set var1=!var1:~0,-1!

if %%b EQU 1 xcopy !var1! c:\bak
)

endlocal
 
Résultat les fichiers l-001-msg2.txt et l-000-msg1.txt sont copié dans le répertoire c:\bak


Dis moi si c'est bien ça que tu voulais
med1974
Batcheur occasionnel
Messages : 3
Enregistré le : 24 mars 2008 14:31

Re: Trouve un nom dans un fichier puis faire la sauvegarde de ce

Message par med1974 »

Bonjour,
Merci beaucoup de votre aide, ça marche mais je voudrai plus de détails sur ces commandes

ex: dir c:\rep /ad | find "REP" | find "." /V > c:\listrep.txt
find "." pourquoi il y a pas de point dans le fichier listrep.txt

merci pour votre contribution

Mes Salutations

flox a écrit :Bonjour,

Si j'ai bien compris, je pense que ce script devrait faire ce que tu souhaite

Arborescence

-C:\
----BAK
----REP
--------20080223
--------------------l-000-msg1.txt
---------------------------|Daniel marc
--------------------l-000-msg2.txt
---------------------------| antoine sebastien
--------20080224
--------------------l-001-msg1.txt
---------------------------| fabien laurent
--------------------l-002-msg2.txt
---------------------------| jules Daniel


fichier c:\test.bat

Code : Tout sélectionner

@echo off

rem efface les fichiers temporaire
del c:\temp.txt
del c:\listrep.txt

rem enregisrte dans le fichier listrep.txt le nom de tous les repétoire du dossier c:\rep
dir c:\rep /ad | find "REP" | find  "." /V > c:\listrep.txt

rem pour tous les fichiers contenue dans les repertoires précedement selectionnée
rem trouver les fichiers conteant "Daniel" et ecrire le resultat dans temp.txt
for /f "tokens=4 delims= " %%a in (c:\listrep.txt) do (find c:\rep\%%a\* "daniel" /C >> c:\temp.txt)


setlocal enableDelayedExpansion
rem pour tous les fichier dans temp.txt si il contient Daniel alors copie vers le rep c:\bak
for /f "tokens=2,3 delims= " %%a in (c:\temp.txt) do (
set var1=%%a
set var1=!var1:~0,-1!

if %%b EQU 1 xcopy !var1! c:\bak
)

endlocal
 
Résultat les fichiers l-001-msg2.txt et l-000-msg1.txt sont copié dans le répertoire c:\bak


Dis moi si c'est bien ça que tu voulais
Avatar du membre
flox
Administrateur du site
Messages : 158
Enregistré le : 18 janv. 2008 22:05

Re: [Résolu] Trouve un nom dans un fichier et en faire une copie

Message par flox »

Salut,

Code : Tout sélectionner

ex: dir c:\rep /ad | find "REP" | find "." /V > c:\listrep.txt
en fait cette commande permet de lister les sous dossier, cela fonctionne en filtrant les ligne contenant "REP" puis en excluant (/V) les lignes ou il y a un point.

dir c:\rep /ad (affiche uniquement les repertoires)

Code : Tout sélectionner

 Le volume dans le lecteur C s'appelle OS
 Le numéro de série du volume est C842-3B3B

 Répertoire de c:\rep

24/03/2008  13:51    <REP>          .
24/03/2008  13:51    <REP>          ..
24/03/2008  20:08    <REP>          20080223
24/03/2008  19:35    <REP>          20080224
               0 fichier(s)                0 octets
               4 Rép(s)  73 750 859 776 octets libres
 
dir c:\rep /ad | find "REP"

Code : Tout sélectionner

24/03/2008  13:51    <REP>          .
24/03/2008  13:51    <REP>          ..
24/03/2008  20:08    <REP>          20080223
24/03/2008  19:35    <REP>          20080224

dir c:\rep /ad | find "REP" | find "." /V

Code : Tout sélectionner

24/03/2008  20:08    <REP>          20080223
24/03/2008  19:35    <REP>          20080224

@ bientôt sur le forum
lbn
Batcheur débutant
Messages : 15
Enregistré le : 25 mars 2008 06:26

Re: [Résolu] Trouve un nom dans un fichier et en faire une copie

Message par lbn »

N'y a til pas besoin d'ajouter /S pour le dir pour voir les sous repertoires ?
Il y a 10 types de personne dans le monde.
- Ceux qui comprennent le binaire
- Et il y a les autres
Avatar du membre
flox
Administrateur du site
Messages : 158
Enregistré le : 18 janv. 2008 22:05

Re: [Résolu] Trouve un nom dans un fichier et en faire une copie

Message par flox »

Si bien entendu si ton arborescence descend encore d'un niveau.

Code : Tout sélectionner

dir c:\rep /ad /s | find "REP" | find "." /V
lbn
Batcheur débutant
Messages : 15
Enregistré le : 25 mars 2008 06:26

Re: [Résolu] Trouve un nom dans un fichier et en faire une copie

Message par lbn »

Ok grand merci !
Il y a 10 types de personne dans le monde.
- Ceux qui comprennent le binaire
- Et il y a les autres
med1974
Batcheur occasionnel
Messages : 3
Enregistré le : 24 mars 2008 14:31

Re: [Résolu] Trouve un nom dans un fichier et en faire une copie

Message par med1974 »

Bonjour,
je voudrai aussi savoir la signification de ces deux expressions

1. setlocal enableDelayedExpansion

2. set var1=!var1:~0,-1!

et par exemple j'ai dans un fichier dans la 3 ligne deux valeur que je dois testé (c.a.d valeur 1 >12 et <35 puis valeur 2 >4 et <10)

merci beaucoup
Avatar du membre
flox
Administrateur du site
Messages : 158
Enregistré le : 18 janv. 2008 22:05

Re: [Résolu] Trouve un nom dans un fichier et en faire une copie

Message par flox »

Bonjour,

Ces deux expressions vont ensemble:

Code : Tout sélectionner

setlocal enableDelayedExpansion
set var1=!var1:~0,-1!
Il s'agit de l'expansion retardé comme expliqué dans la FAQ, cela permet de parer au problème des boucles FOR, en effet lorsque que l'on crée une de ces boucle il est impossible de définir une variable dans cette dernière. La solution est donc d'activer l'expansion retardé et ensuite d'appeler les variables non plus avec des pourcentages mais des point d'exclamation !. Dans l'exemple ci dessus on re-découpe même la variable en enlevant le dernier caractère ":~0,-1".

et par exemple j'ai dans un fichier dans la 3 ligne deux valeur que je dois testé (c.a.d valeur 1 >12 et <35 puis valeur 2 >4 et <10)
Pour réaliser cette opération tu peut imbriqué des IF:

exemple:

Code : Tout sélectionner

set valeur=15
if %valeur% GTR 12 (
if %valeur% LSS 35 echo %valeur% est inferieur a 35 et superieur a 12
)
pause

regardes les exemples du site


En espérant avoir pu t'éclairer @+
Répondre