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

  FORUM HardWare.fr
  Programmation

  [BATCH] ... :)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[BATCH] ... :)

n°93406
paranoidan​droid
Posté le 25-01-2002 à 16:28:54  profilanswer
 

Je crack...
 
Pkoi ça ... ça ne marche pas
 
file.bat
================================================
for %%R in (C:\MesDoc~1\fichier1
C:\MesDoc~1\fichier2
C:\MesDoc~1\fichier3
C:\MesDoc~1\fichier4
C:\MesDoc~1\fichier5
C:\MesDoc~1\fichier6) do call search.bat %%R
================================================
 
search.bat
================================================
for %%C in (chaine1
chaine2
chaine3
chaine4) do grep -i -l %%C %2 > resultat.txt
================================================
 
Je veux donc obtenir le résultat d'un grep pour plusieurs chaines dans plusieurs fichiers ..
 
mais j'ai sans cesse ceci :
 
 
STGF04 C:\MesDoc~1>C:\MesDoc~1\Commande ou nom de fichier incorrect
 
STGF04 C:\MesDoc~1>C:\MesDoc~1\
Commande ou nom de fichier incorrect
 
STGF04 C:\MesDoc~1>C:\MesDoc~1\Commande ou nom de fichier incorrect
 
STGF04 C:\MesDoc~1>C:\MesDoc~1\
Commande ou nom de fichier incorrect
 
STGF04 C:\MesDoc~1>C:\MesDoc~1\
Commande ou nom de fichier incorrect
 
STGF04 C:\MesDoc~1>C:\MesDoc~1\
Commande ou nom de fichier incorrect
 
STGF04 C:\MesDoc~1>C:\MesDoc~1\) d
call search.bat %R
Commande ou nom de fichier incorrect

mood
Publicité
Posté le 25-01-2002 à 16:28:54  profilanswer
 

n°93414
Mara's dad
Yes I can !
Posté le 25-01-2002 à 17:03:04  profilanswer
 

1 - mettre sur une seule ligne si c'est pas le cas :
 
for %%R in (C:\MesDoc~1\fichier1 C:\MesDoc~1\fichier2 C:\MesDoc~1\fichier3 C:\MesDoc~1\fichier4 C:\MesDoc~1\fichier5 C:\MesDoc~1\fichier6) do call search.bat %%R  
 
2 - C'est %1 et pas %2 :
for %%C in (chaine1 chaine2 chaine3 chaine4) do grep -i -l %%C %1 > resultat.txt  
 
3 - Si tu fait > resultat.txt, tu n'aurra le resultat que du dernier GREP, donc
 
Dans file.bat, ajoute au début :
ECHO "RECHERCHE DE CHAINE" > resultat.txt
 
et dans search tu fait :
 
for %%C in (chaine1 chaine2 chaine3 chaine4) do grep -i -l %%C %1 >> resultat.txt
 
Cà devrait déjà aller mieux.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°93423
paranoidan​droid
Posté le 25-01-2002 à 17:23:59  profilanswer
 

Mara's dad a écrit a écrit :

1 - mettre sur une seule ligne si c'est pas le cas :
 
for %%R in (C:\MesDoc~1\fichier1 C:\MesDoc~1\fichier2 C:\MesDoc~1\fichier3 C:\MesDoc~1\fichier4 C:\MesDoc~1\fichier5 C:\MesDoc~1\fichier6) do call search.bat %%R  
 
2 - C'est %1 et pas %2 :
for %%C in (chaine1 chaine2 chaine3 chaine4) do grep -i -l %%C %1 > resultat.txt



 
oki merci...
 

Mara's dad a écrit a écrit :

 
 
3 - Si tu fait > resultat.txt, tu n'aurra le resultat que du dernier GREP, donc
 
Dans file.bat, ajoute au début :
ECHO "RECHERCHE DE CHAINE" > resultat.txt
 




 
ça j'ai pas trop compris l'histoire de l'écho ...mais je ne laisse pas > je mets >>
 

Mara's dad a écrit a écrit :

 
et dans search tu fait :
 
for %%C in (chaine1 chaine2 chaine3 chaine4) do grep -i -l %%C %1 >> resultat.txt
 
Cà devrait déjà aller mieux.  




 
Pour l'espace entre les chaines, j'aimerais bien le faire.. mais le probleme c'est que les chaines sont en fait le résultat d'un requete ... et le résultat fait a peu pres 800 lignes...
 
* = espace
 
exemple :  
 
chaine1*******
chaine2*******
chaine134*****
chaine116*****
chaine1BETA***
chaine1encore*
chaine1fiezh**
chaine9*******
 
Voilà ce que j'obtiens ..

 

[edtdd]--Message édité par paranoidandroid--[/edtdd]

n°93553
Mara's dad
Yes I can !
Posté le 25-01-2002 à 22:42:51  profilanswer
 

Bon, on commence par le ">" et le ">>"
 
Se sont des ordres de redirection de la sortie "Standard"
 
Par défaut, la sortie standard, c'est la "Console" (le prériphérique CON: ), c'est à dire l'écran dans 99.99999% des cas.
Donc si tu redirige la sortie, c'est pour que çà n'aille pas sur l'écran, mais ailleur, dans le fichier "resultat.txt" dans ton cas.
 
">" Va créer le fichier pour y mettre le résultat de l'opération. Donc si le fichier éxiste, il sera écrasé.
 
">>" Ajoute le résultat de l'opération à la fin du fichier. Si le fichier n'éxiste pas, il est créé.
 
ECHO est une commande qui envoie les paramètres sur la sortie standard (l'écran !)
Si tu fait :

Code :
  1. ECHO toto

, çà t'affiche simplement 'toto' à l'écran
Si tu fait :

Code :
  1. ECHO toto > resultat.txt

, çà crée (ou écrase s'il éxiste) le fichier resultat.txt qui contiendra donc 'toto'.
J'ai fait çà pour 2 raison :
1- M'assurer que le fichier soit vidé avant de mettre les résultats dedans.
2- Mettre une première ligne dans le fichier qui t'indique de quoi il s'agit.
 
Mais si cette ligne te gène, tu peux commencer par supprimer le fichier pour être certain de ne pas ajouter tes résultats à un fichier qui en contient déjà.
Pour faire propre :

Code :
  1. IF EXIST resultat.txt del resultat.txt


 
Maintenant, après ce long discours, j'ai une mauvaise nouvelle.
 
Quand tu fais :

Code :
  1. FOR %%R in (...) do ...

tu demande à l'interpréteur de commande d'éxécuter une commande (normal non, pour un interpréteur de commande !).
Le problème c'est qu'une commande DOIT tenir sur une seule ligne. La raison en est que c'est le caractère de fin de ligne (CR_LF) qui marque la fin de la commande.
D'autre part, et c'est là la mauvaise nouvelle, une commande ne peut dépasser une certaine taille. Je n'ai plus la limite en tête, mais 800 * 15 = 168000, c'est TROP !
 
Donc faut trouver une autre solution.
 
Par exemple :
Si au lieu de te sortir
chaine1
chaine2
chaine134
chaine116
chaine1BETA
chaine1encore  
chaine1fiezh
chaine9
 
ta requête pouvait faire çà :

Code :
  1. grep -i -l "chaine1       " %1 >> resultat.txt
  2. grep -i -l "chaine2       " %1 >> resultat.txt
  3. grep -i -l "chaine134     " %1 >> resultat.txt
  4. grep -i -l "chaine116     " %1 >> resultat.txt
  5. grep -i -l "chaine1BETA   " %1 >> resultat.txt
  6. grep -i -l "chaine1encore " %1 >> resultat.txt
  7. grep -i -l "chaine1fiezh  " %1 >> resultat.txt
  8. grep -i -l "chaine9       " %1 >> resultat.txt


Il suffit d'appeler ce fichier search.bat, et le tour est joué !

 

[edtdd]--Message édité par Mara's dad--[/edtdd]


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°93747
paranoidan​droid
Posté le 26-01-2002 à 18:27:22  profilanswer
 

En ce qui concerne la liste des grep ... un petit exe en C fera l'affaire, je dois aussi m'en servir pour interpreter les résultts à la fin.
 
Merci pour ton aide

n°93752
verdoux
And I'm still waiting
Posté le 26-01-2002 à 19:07:50  profilanswer
 

Tu devrais installer un vrai langage de script, genre perl ou mieux python.

 

[edtdd]--Message édité par Verdoux--[/edtdd]

n°93761
paranoidan​droid
Posté le 26-01-2002 à 19:31:01  profilanswer
 

Verdoux a écrit a écrit :

Tu devrais installer un vrai langage de script, genre perl ou mieux python.  
 
 




 
python ?

n°93763
verdoux
And I'm still waiting
Posté le 26-01-2002 à 19:45:09  profilanswer
 

www.python.org
 
Le paradis des scripteurs :D

n°93780
Mara's dad
Yes I can !
Posté le 26-01-2002 à 20:14:46  profilanswer
 

En parlant de script, sur tout Windows qui se respecte (si c'est possible), il ya WSH (Windows Scripting Host) !
 
C'est quasiment inconnu, mais en fait il s'agit de JS (J Script, un Javascript à la sauce PetitMou).
 
Il y a deux façon de faire tourner un JS : Avec WScript ou avec CScript.
Comme leur nom l'indique, WScript fait tourner les scripts dans un environnement Windows alors que CScript fonctionne en mode console.
 
C'est à essayer au moins une fois pour se faire une idée.
 
Un exemple que j'avais fait pour remplacer un BATCH pour un gars du forum y'a pas si longtemp :
 

Code :
  1. function delFile( FolderSpec, FileSpec )
  2. {
  3. var fso, f, fc, s, c;
  4. c = 0;
  5. fso = new ActiveXObject("Scripting.FileSystemObject" );
  6. f = fso.GetFolder(FolderSpec);
  7.  
  8. // Suppression du fichier
  9. if (fso.FileExists(FolderSpec + "\\" + FileSpec))
  10. {
  11.  fso.DeleteFile( FolderSpec + "\\" + FileSpec );
  12.  c ++;
  13. }
  14. // Recherche dans les sous-répertoires
  15. fc = new Enumerator(f.SubFolders);
  16. for (; !fc.atEnd(); fc.moveNext())
  17. {
  18.  c += delFile( fc.item(), FileSpec );
  19. }
  20. return( c );
  21. }
  22. WScript.Echo( delFile( "c:\\temp", "test.txt" ) + " Fichiers supprimés !" );


 
C'est assez évident, mais se script sert à supprimer les fichiers (test.txt) du répertoire c:\temp ET de ses sous répertoires.
Une sorte de DEL /S c:\temp\test.txt en fait.
Sauf que l'option /s , ben elle existe pas !
 
Salut à vous tous, et n'hésitez pas à répondre à mon post  ;) :  
 
http://forum.hardware.fr/forum2.ph [...] c=1&trash=


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.

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

  [BATCH] ... :)

 

Sujets relatifs
HELP : appel aux pros du batch !création de fichier batch (newbie !)
[batch] détruire fichier s'il n'existe pas déjà à un autre endroit...[batch] créer un fichier log
[DOS / batch] Quelqu'un sait où on peut trouver de la doc ?[BATCH ] Alternative à la commande Choice pour NT
[BATCH] créer un fichier sous DOS ?[batch avancé] pour les forts
[BATCH] renommage de bocou de fichiersen batch virer un caractere ds une ligne
Plus de sujets relatifs à : [BATCH] ... :)


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