[Resolu] Parcourir tout les fichier d'un dossier et detecter des mots

Parcourir tout les fichier d'un dossier et detecter des mots [Resolu] - Shell/Batch - Programmation

Marsh Posté le 05-10-2007 à 13:32:28    

Voilà mon probleme:
 
J'ai un dossier, ce dossier contient plusieurs dizaine de fichier de la meme extension de type: blabla.Challenge.Gbx
J'aimerai avoir un batch qui parcourt donc tout ces fichier ".Challenge.Gbx", et à chaque fois que l'un de ces fichiers contient l'un de ces mots:
 
lycos
neuf
skynet
shootpidoo
zvision
2fast4you

 
Il faudrait que le batch crée un fichier texte dans le dossier, qui me signale quel fichier contient l'un de ces mot, inutile de preciser lequel de ces mots.
 
Fichier texte de ce genre:
 
Nom du fichier: blabla.Challenge.Gbx
Nom du fichier: blabla14.Challenge.Gbx
 
Pensez pouvoir m'aider à faire ça ?
 
Ce batch me ferai gagner un temps précieux, plutot que d'utiliser un editeur de texte et faire une recherche sur tout les fichiers...
 
Merci d'avance pour votre aide  ;)


Message édité par Sokarz le 06-10-2007 à 03:09:52
Reply

Marsh Posté le 05-10-2007 à 13:32:28   

Reply

Marsh Posté le 05-10-2007 à 13:37:45    

Avec quel système d'exploitation, quel shell ?
 
Si c'est sous Unix, c'est possible de le faire avec un grep ou egrep
Si c'est sous DOS, il faudrait utiliser la commande find
Si c'est sous Windows, un petit programme VBS peut faire cela.
 
Ca ressemble à une question de cours. Est-ce que c'est le cas ?

Reply

Marsh Posté le 05-10-2007 à 14:00:16    

Sur Windows XP et Vista.
 
Et non c'est pas pour un cours (du tout... 33 ans inside lol) en fait c'est pour une team de jeux, on à des "map", et certaine sont "corrompu" dans le sens ou elle comportent des erreur dans la "map", c'est un bug en rapport avec le jeu Trackmania United, je ne rentrerai pas dans les details c'est long et fastidieux à expliquer. On sais comment corriger le probleme, mais aavnt ça i lfaut identifier quel fichier est "corrompu" par des url foireuse, ces url correspondent au mot cité plus haut, d'ou la liste des mots...
 
Comme il nous faudrait un quelque chose de simple, rapide, efficace, j'ai eu l'idée d'utiliser un batch. Mais ça me dépasse, je ne connais aps l'utilisation des commandes for, find, if,...  
 
Dans l'idée, un batch (ou script vbs) qui parcourt tous les fichiers comme expliquer dans mon post initial, et lorsque un fichier comporte l'un des mots cité plus haut, le batch crée un fichier un fichier texte, en indiquant le nom du fichier qui contient l'un des mots "malheureux"
 
A partir de là, avoir un batch ou script faisant cela, je serai plus qu'heureux ^^
 
Je pense que en batch c'est faisable, mais ça depasse largement mes connaissance des batch (helas), je suppose qu'avec les commandes "for find string >> echo erreur.txt" (je schematise voir caricature) c'est faisable, mais je ne sais pas le faire, et mes malgré mes recherches sur le net ou sur ce forum, je n'ai pas trouvés de batch qui propose de faire ça.
 
Fichier VBS, je ne suis pas contre (je ne vais tout de meme pas me plaindre que l'on m'aide!), il faudrait simplement que le script soit compatible Xp/Vista est soit fonctionnel car je ne saurais pas l'adapter car je ne comprend pas le Vbs.
 
Pense tu pouvoir m'aider ?


Message édité par Sokarz le 05-10-2007 à 14:00:58
Reply

Marsh Posté le 05-10-2007 à 14:20:47    

un truc de ce genre peut etre:

Code :
  1. (for %%a in (lycos neuf skynet shootpidoo zvision 2fast4you) do find "%%a" *.Challenge.Gbx ) | find "------" | sort


à mettre dans un fichier .bat ou alors utiliser qu'un seul % pour tester en ligne de commande.

Reply

Marsh Posté le 05-10-2007 à 14:42:42    

Merci pour ton aide, mais là je comprend pas grand chose, mes neurones sont pauvres ^^
 
Je mets ça dans un bat/cmd:
 

Code :
  1. (for %%a in (lycos neuf skynet shootpidoo zvision 2fast4you) do find "%%a" *.Challenge.Gbx ) | find "lycos neuf skynet shootpidoo zvision 2fast4you" | sort echo >> erreur.txt


 
Ca me met dans le fichier texte, erreur.txt ceci:
 

Code :
  1. Commande ECHO activ‚e.


 
Ca ne m'indique aucun des fichier qui contient les mots clé, raaah, je suis nul  :sweat:  
 
Euuuh fallait bien que je remplace les tiret "------" de ton exemple par les mot clé ?
 

Code :
  1. (for %%a in (lycos neuf skynet shootpidoo zvision 2fast4you) do find "%%a" *.Challenge.Gbx ) | find "------" | sort echo >> erreur.txt


 
Et mettre un echo >> erreur.txt pour que ça crée le fichier texte ?
 
Aider moi, svp, je ne suis qu'un malheureux pauvre noob lol

Reply

Marsh Posté le 05-10-2007 à 14:57:45    

Sokarz a écrit :


Aider moi, svp, je ne suis qu'un malheureux pauvre noob lol


ca n'empêche pas de se documenter ou au minimum tester ;)
 
la commande est à écrire telle qu'elle est dans le fichier bat.
les "-------" sont à laisser, c'est ce qu'utilise find pour te dire le nom du fichier.
tu peux faire un simple test:

find "lycos" *.Challenge.Gbx


 
le echo est une commande et n'a rien à faire après sort!
si tu veux rediriger le résultat:

Code :
  1. (for %%a in (lycos neuf skynet shootpidoo zvision 2fast4you) do find "%%a" *.Challenge.Gbx ) | find "------" | sort > erreur.txt


 

Reply

Marsh Posté le 06-10-2007 à 03:06:55    

Merci beaucoup pour votre aide à tous les deux ;)
 
Pendant une heure j'ai essayer plein de modif de ce type:
 

Code :
  1. @echo off
  2. (for %%a in (lycos neuf skynet shootpidoo zvision 2fast4you) do find /c "%%a" *.Challenge.Gbx) | find "------" | sort /r > erreur2.txt
  3. findstr "1" erreur2.txt | sort > erreur3.txt
  4. del /q erreur2.txt
  5. ren erreur3.txt _map-corrompu.txt
  6. exit


 
ce qui affiche le resultat comme cela:
 

Code :
  1. ---------- EXEMPLEA.CHALLENGE.GBX: 1
  2. ---------- EXEMPLEB.CHALLENGE.GBX: 1
  3. ---------- EXEMPLEB.CHALLENGE.GBX: 1


 
Ce qui ne m'arrrangait pas du tout, car si un fichier avais plus de un de ces mots "lycos neuf skynet shootpidoo zvision 2fast4you" le nom du fichier apparaissait plusieurs fois dans le fichier de sortie :(
 
Donc après avoir fouiller find /? et findstr /?
 
Je suis tombé sur cette variante:
 

Code :
  1. FINDSTR /S /M "lycos neuf skynet shootpidoo zvision 2fast4you" *.GBX > _map-corrompu.txt


 
Et là Ô miracle le fichier de sortie:
 

Code :
  1. ExempleA.Challenge.Gbx
  2. ExempleB.Challenge.Gbx


 
Fini les tiret, fini les doublon ! Comme quoi parfois une commande "toute bête" peut faire de joli chose.....
 
Du coup j'ai trouvé mon bonheur ^^
 
Encore merci pour le coup de main qui m'a mis sur la piste  :wahoo:


Message édité par Sokarz le 06-10-2007 à 03:08:24
Reply

Marsh Posté le 06-10-2007 à 05:45:49    

ah oui, j'avais carrement oublié cette commande, comme quoi :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed