[Résolu] Trouve un nom dans un fichier et en faire une copie
Modérateur : WIN32-[GG]
[Résolu] Trouve un nom dans un fichier et en faire une copie
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
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
Re: Trouve un nom dans un fichier puis faire la sauvegarde de ce
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
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
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
Dis moi si c'est bien ça que tu voulais
Re: Trouve un nom dans un fichier puis faire la sauvegarde de ce
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
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.batRésultat les fichiers l-001-msg2.txt et l-000-msg1.txt sont copié dans le répertoire c:\bakCode : 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
Dis moi si c'est bien ça que tu voulais
Re: [Résolu] Trouve un nom dans un fichier et en faire une copie
Salut,
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)
dir c:\rep /ad | find "REP"
dir c:\rep /ad | find "REP" | find "." /V
@ bientôt sur le forum
Code : Tout sélectionner
ex: dir c:\rep /ad | find "REP" | find "." /V > c:\listrep.txt
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
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
Re: [Résolu] Trouve un nom dans un fichier et en faire une copie
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
- Ceux qui comprennent le binaire
- Et il y a les autres
Re: [Résolu] Trouve un nom dans un fichier et en faire une copie
Si bien entendu si ton arborescence descend encore d'un niveau.
Code : Tout sélectionner
dir c:\rep /ad /s | find "REP" | find "." /V
Re: [Résolu] Trouve un nom dans un fichier et en faire une copie
Ok grand merci !
Il y a 10 types de personne dans le monde.
- Ceux qui comprennent le binaire
- Et il y a les autres
- Ceux qui comprennent le binaire
- Et il y a les autres
Re: [Résolu] Trouve un nom dans un fichier et en faire une copie
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
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
Re: [Résolu] Trouve un nom dans un fichier et en faire une copie
Bonjour,
Ces deux expressions vont ensemble:
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".
exemple:
regardes les exemples du site
En espérant avoir pu t'éclairer @+
Ces deux expressions vont ensemble:
Code : Tout sélectionner
setlocal enableDelayedExpansion
set var1=!var1:~0,-1!
Pour réaliser cette opération tu peut imbriqué des IF: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)
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 @+