... :) [BATCH] - Programmation
Marsh Posté le 25-01-2002 à 17:03:04
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.
Marsh Posté le 25-01-2002 à 17:23:59
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]
Marsh Posté le 25-01-2002 à 22:42:51
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 :
|
, çà t'affiche simplement 'toto' à l'écran
Si tu fait :
Code :
|
, çà 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 :
|
Maintenant, après ce long discours, j'ai une mauvaise nouvelle.
Quand tu fais :
Code :
|
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 :
|
Il suffit d'appeler ce fichier search.bat, et le tour est joué !
[edtdd]--Message édité par Mara's dad--[/edtdd]
Marsh Posté le 26-01-2002 à 18:27:22
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
Marsh Posté le 26-01-2002 à 19:07:50
Tu devrais installer un vrai langage de script, genre perl ou mieux python.
[edtdd]--Message édité par Verdoux--[/edtdd]
Marsh Posté le 26-01-2002 à 19:31:01
Verdoux a écrit a écrit : Tu devrais installer un vrai langage de script, genre perl ou mieux python. |
python ?
Marsh Posté le 26-01-2002 à 20:14:46
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 :
|
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=
Marsh Posté le 25-01-2002 à 16:28:54
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