Question très technique
Résolu
parislover25
Messages postés
46
Date d'inscription
Statut
Membre
Dernière intervention
-
parislover25 Messages postés 46 Date d'inscription Statut Membre Dernière intervention -
parislover25 Messages postés 46 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je vous expose ma situation, mes actions manuelles et mes souhaits d’automatisation. Sachant que je n’ai aucune expérience de développement quelconque, je n’ai aucune idée de la faisabilité technique de tout ou partie de ma demande.
Données :
- Des répertoires sur mon disque dur (il y en a plusieurs, mais si la solution technique cible nécessite qu’il n’y ait qu’un seul répertoire, c’est possible)
- Dans les répertoires, des documents au format WORD, PDF, RTF et PPT
- Il y a environ 3000 documents en base actuellement et en moyenne une cinquantaine de nouveaux par semaine
Mes tâches
- Faires des recherches de mots dans les documents (j’utilise la fonction « rechercher un mot dans le fichier » dans l’explorateur Windows XP)
- Je recherche un mot à la fois dans le répertoire « racine » (qui contient les sous-répertoires, contenant eux-mêmes les 3000 documents déjà évoqués)
- J’ai environ 150 mots à rechercher dans les documents
- Le résultat de la recherche me liste les fichiers dans lesquels se trouve le mot recherché
- En utilisant la fonction DOS qui me permet de transformer le résultat de la recherche en liste, j’exporte la liste dans EXCEL
- Le fichier EXCEL cible (exemple sur demande) me permet ensuite, grâce à la fonction filtre, de retrouver les fichiers correspondant à plusieurs mots parmi les 150
- Je ne sais jamais à l’avance quels groupes de mots je dois rechercher à un moment donné, c’est pourquoi j’utilise ce fichier Excel qui répertorie les 150 mots et me permet de filtrer à la demande
LE GROS PROBLEME C’EST QUE LA LISTE DE DOCUMENTS S’ENRICHIT TOUTES LES SEMAINES ET JE DOIS RECOMMENCER LA RECHERCHE SUR LES 150 MOTS CHAQUE SEMAINE SUR LES NOUVEAUX DOCUMENTS C’EST TRES LONG !!!!
Besoin minimum
- A minima, j’aimerais pouvoir automatiser l’action de recherche
- Je ne sais pas ce qu’il est techniquement possible de faire (il y a peut-être déjà des outils répondant à cette demande), mais si je pouvais exécuter un programme qui déclenche la recherche d’un « mot » dans tous les fichiers du répertoire, ce serait déjà pas mal
- Si en plus ce programme me permet en un seul « clic » de rechercher les 150 mots (même si je dois laisser le PC tourner des heures), ce serait top !
Besoin idéal
- Un programme (ou script ou quoi que ce soit) qui exécute les actions suivantes :
o Lancer la recherche
o Transformer le résultat en fichier texte (ou mieux en fichier excel en mettant dans la colonne A la liste des fichiers trouvés et dans la colonne B un X ou 1 ou autre chose (la colonne B a pour titre le « mot » recherché))
Document Excel (sur demande) pour comprendre à quoi ressemble le fichier cible que je gère manuellement pour l’instant
Si quelqu’un à compris mon besoin (je ne sais pas si c’est super clair….) et si un semblant de solution me permettant de moins galérer existe, je suis preneur.
MERCI !!
Je vous expose ma situation, mes actions manuelles et mes souhaits d’automatisation. Sachant que je n’ai aucune expérience de développement quelconque, je n’ai aucune idée de la faisabilité technique de tout ou partie de ma demande.
Données :
- Des répertoires sur mon disque dur (il y en a plusieurs, mais si la solution technique cible nécessite qu’il n’y ait qu’un seul répertoire, c’est possible)
- Dans les répertoires, des documents au format WORD, PDF, RTF et PPT
- Il y a environ 3000 documents en base actuellement et en moyenne une cinquantaine de nouveaux par semaine
Mes tâches
- Faires des recherches de mots dans les documents (j’utilise la fonction « rechercher un mot dans le fichier » dans l’explorateur Windows XP)
- Je recherche un mot à la fois dans le répertoire « racine » (qui contient les sous-répertoires, contenant eux-mêmes les 3000 documents déjà évoqués)
- J’ai environ 150 mots à rechercher dans les documents
- Le résultat de la recherche me liste les fichiers dans lesquels se trouve le mot recherché
- En utilisant la fonction DOS qui me permet de transformer le résultat de la recherche en liste, j’exporte la liste dans EXCEL
- Le fichier EXCEL cible (exemple sur demande) me permet ensuite, grâce à la fonction filtre, de retrouver les fichiers correspondant à plusieurs mots parmi les 150
- Je ne sais jamais à l’avance quels groupes de mots je dois rechercher à un moment donné, c’est pourquoi j’utilise ce fichier Excel qui répertorie les 150 mots et me permet de filtrer à la demande
LE GROS PROBLEME C’EST QUE LA LISTE DE DOCUMENTS S’ENRICHIT TOUTES LES SEMAINES ET JE DOIS RECOMMENCER LA RECHERCHE SUR LES 150 MOTS CHAQUE SEMAINE SUR LES NOUVEAUX DOCUMENTS C’EST TRES LONG !!!!
Besoin minimum
- A minima, j’aimerais pouvoir automatiser l’action de recherche
- Je ne sais pas ce qu’il est techniquement possible de faire (il y a peut-être déjà des outils répondant à cette demande), mais si je pouvais exécuter un programme qui déclenche la recherche d’un « mot » dans tous les fichiers du répertoire, ce serait déjà pas mal
- Si en plus ce programme me permet en un seul « clic » de rechercher les 150 mots (même si je dois laisser le PC tourner des heures), ce serait top !
Besoin idéal
- Un programme (ou script ou quoi que ce soit) qui exécute les actions suivantes :
o Lancer la recherche
o Transformer le résultat en fichier texte (ou mieux en fichier excel en mettant dans la colonne A la liste des fichiers trouvés et dans la colonne B un X ou 1 ou autre chose (la colonne B a pour titre le « mot » recherché))
Document Excel (sur demande) pour comprendre à quoi ressemble le fichier cible que je gère manuellement pour l’instant
Si quelqu’un à compris mon besoin (je ne sais pas si c’est super clair….) et si un semblant de solution me permettant de moins galérer existe, je suis preneur.
MERCI !!
A voir également:
- Question très technique
- Logiciel dessin technique gratuit - Télécharger - CAO-DAO
- Notice technique pdf - Guide
- Faux support technique - Accueil - Arnaque
- Msi n1996 fiche technique ✓ - Forum Carte-mère/mémoire
- Mytf1 un problème technique est survenu - Forum Box et Streaming vidéo
4 réponses
Bonsoir,
Je présume que ce n'est plus d'actualité compte tenu du peu de réaction suscité par mon précédent message, mais dans le doute je poste quand même une version améliorée du batch précédent. Elle intègre entre autre la prise en compte des espaces pouvant apparaître dans les noms de fichier, des mot/critères de recherche. Elle édite un état statisique simple en fin de traitement. L'affichage à l'écran des cas d'égalité est maintenant optionnel.
Je présume que ce n'est plus d'actualité compte tenu du peu de réaction suscité par mon précédent message, mais dans le doute je poste quand même une version améliorée du batch précédent. Elle intègre entre autre la prise en compte des espaces pouvant apparaître dans les noms de fichier, des mot/critères de recherche. Elle édite un état statisique simple en fin de traitement. L'affichage à l'écran des cas d'égalité est maintenant optionnel.
ECHO OFF :: **************************************************************************** rem RECHERCHE DE FICHIERS CONTENANT AU MOINS UN CRITERE DE SELECTION rem **************************************************************************** rem ENVIRONNEMENT : rem 1) Il faut créer un fichier (ici %nomF_CH%) contenant le ou les mot(s) rem servant de critère de recherche (UN SEUL MOT/CRITERE par ligne). rem Exemple de fichier %nomF_CH% : rem (Il peut exister des espaces DANS un MOT/CRITERE.) rem mot1-recherché rem mot2 recherché (correspond à UN MOT/CRITERE complet de recherche) rem mot3-re.......-...... rem }mot4-re.......-...... (ignoré car précédé d'un "}") rem FONCTIONNEMENT : rem 2) Ensuite il faut ouvrir une invite de commandes et "se positionner" avec rem la commande CD C:\.....\....\ sur le répertoire de travail contenant le rem présent fichier (.bat). rem rem 3) Puis sur la ligne de commande taper le nom de ce fichier : rem a) SEUL (sans paramètre): DANS CE CAS LA RECHERCHE DEBUTE A LA RACINE : rem (nom-de-ce-fichier est équivalent à nom-de-ce-fichier C:\) rem OU rem b) AVEC LE PARAMETRE SUIVANT : C: DANS CE CAS LA RECHERCHE S'EFFECTUE rem UNIQUEMENT SUR LE REPERTOIRE EN COURS : rem nom-de-ce-fichier C: rem OU rem c) SUIVI DE TOUT OU PARTIE DU NOM D'UN CHEMIN LA RECHERCHE S'EFFECTUE rem SUR LE REPERTOIRE NOMME : rem nom-de-ce-fichier C:\Documents and Settings\Christian\Mes documents\ rem suivant que l'on souhaite commencer la recherche depuis la racine du rem disque (ici le disque C) ou pour tout un répertoire. Celui-ci peut rem contenir des sous-répertoires (notion de répertoire générique) rem Il n'est pas possible de tronquer un nom de dossier par rexemple : rem nom-de-ce-fichier C:\Documents and Set\ n'est pas permis. rem Le traitement peut à tout moment être interrompu sans risque en pressant rem les touches Ctrl+C. rem rem 4) Les résultats d'exécution se présentent sous la forme de 2 fichiers : rem a) %nomF_OUT% contient la trace des égalités trouvées : rem - le nom du fichier prospecté suivi d'un libellé, rem - le répertoire et le chemin des fichiers présents sur le disque, pour rem lesquels une correspondance a été trouvée avec l'un des mots/critères rem présents dans le fichier %nomF_CH%. rem Exemple de fichier %nomF_OUT% : rem (optionnel visuel_ecran=1 l'équivalent du contenu de ce fichier peut rem être visualisé à la console.) rem fichier cree par chlib Le 13/10/2008 a 12:41:27,37 rem {....................... rem {....................... rem {0001----------------------------------------------------------------------- rem }a} nom1.ext (1iere. egalite trouvee: mot1-recherché) rem }b} C:\Documents and Settings\Christian\Mes documents\BATCH_files\ rem }c} C:\Documents and Settings\Christian\Mes documents\BATCH_files\nom1.ext rem {--------------------------------------------------------------------------- rem {0002----------------------------------------------------------------------- rem }a} nom2.ext (1iere. egalite trouvee: mot2 recherché) rem }b} C:\Documents and Settings\Christian\Mes documents\BATCH_files\ rem }c} C:\Documents and Settings\Christian\Mes documents\BATCH_files\nom2.ext rem {--------------------------------------------------------------------------- rem {0003----------------------------------------------------------------------- rem }a} nom2.ext (2eme. egalite trouvee: mot3-re.......-......) rem }b} C:\Documents and Settings\Christian\Mes documents\BATCH_files\ rem }c} C:\Documents and Settings\Christian\Mes documents\BATCH_files\nom2.ext rem {--------------------------------------------------------------------------- rem NB. Si, dans un même fichier plusieurs occurrences de MOTS/CRITERES appa- rem raissent, ce fichier sera nommé (dans %nomF_OUT lignes a, b et c) pour rem chaque égalité trouvée SAUF dans les cas où sur une MEME LIGNE du rem fichier, existe plus d'une occurrence du MEME MOT/CRITERE. Dans ces cas rem seul le 1er mot/critère est considéré, les autres sont ignorés et ne rem génèrent pas de lignes dans le fichier %nomF_OUT. rem Par contre, si plusieurs MOTS/CRITERES DIFFERENTS apparaissent rem sur une MEME LIGNE d'un même fichier ils seront pris en compte. rem b) %nomF_MATCH% contenant : rem le nom et l'extension de chaque fichier pour lesquels une égalité au rem moins a été trouvée. A l'inverse du fichier %nomF_OUT% chaque fichier rem est nommé une seule fois quelques soit le nombre (> 0) de cas rem d'égalités trouvés. Idem si deux fichiers apparaissent sous le même rem nom dans deux répertoires différents. rem Exemple de fichier %nomF_MATCH% : rem {fichier cree par chlib Le 13/10/2008 a 12:41:27,35 rem {....................... rem {....................... rem nom1.ext rem nom2.ext (2 égalités => n'apparaît qu'une seule fois dans ce fichier) rem {....................... rem {....................... rem **************************************************************************** SETLOCAL ENABLEdelayedExpansion SETLOCAL ENABLEextensions MODE CON COLS=150 LINES=2000 CLS rem répertoire de travail (contient notamment ce fichier.) : CD C:\Documents and Settings\Christian\Mes documents\BATCH_files rem ---------------------------------------------------------------------------- rem SEQUENCE PRINCIPALE. rem ---------------------------------------------------------------------------- CALL :DEFINIT_VAR %0 IF EXIST "%nomF_OUT%" ( ERASE %nomF_OUT% ) IF EXIST "%nomF_MATCH%" ( ERASE %nomF_MATCH% ) rem Séquence permettant de déterminer le type de traitement choisi. CALL :TYP_TITRE_TRAIT %1 %2 %3 %4 %5 %6 %7 %8 %9 rem Contrôles de cohérence portant sur l'environnement. CALL :CONTROLES !param_1! IF "!indic_anom!" == "1" ( GOTO :EOF ) rem Ecriture d'un message d'information concernant le traitement. CALL :INFOS_TITRE rem - BOUCLE PRINCIPALE de lectures des chemins d'accès. rem - EXTRACTION (chemin accès) du nom et de l'extension du fichier en cours. rem - RECHERCHE dans ce fichier en cours de la présence de 1 ou plusieurs rem occurrences de chaque MOT/CRITERE présent dans le fichier nomF_CH FOR /R "%param_1%" %%F IN (*.*) DO ( SET /A "nb_fichiers_accedes+=1" SET /A "cpt_mots_trouves=0" SET "nom_ext=%%~nxF" FOR /F "eol=} tokens=1* delims=" %%J IN (%nomF_CH%) DO ( FOR /F "tokens=1* delims=" %%K IN ( ' TYPE "%%F" ^| FIND /I "%%J" ' ) DO ( SET /A "cpt_mots_trouves+=1" SET "nom_lib_rech=%%J" CALL :CRE_FICH_MATCH CALL :ECRITURE_MATCH "%%F" !nom_ext! ) ) ) IF "%visuel_ecran%" == "1" ( CALL :INFOS_TITRE ) CALL :STAT_FIN ENDLOCAL GOTO :EOF rem -----------------FIN DE LA SEQUENCE PRINCIPALE rem ---------------------------------------------------------------------------- rem Définition et initialisation des variables utiles au traitement. :DEFINIT_VAR SET "nom_pgm=%1" SET "date_deb=%DATE%" SET "time_deb=%TIME%" rem définition des noms des fichiers : rem En INPUT : SET "nomF_CH=%USERNAME:~0,+3%-%nom_pgm%-cherch.txt" rem En OUTPUT : SET "nomF_OUT=%USERNAME:~0,+3%-%nom_pgm%-OUT.txt" SET "nomF_MATCH=%USERNAME:~0,+3%-%nom_pgm%-MATCH.txt" SET /A "millions = 10000000" rem Compteurs pour statistiques d'éxécution : SET /A "nb_fichiers_accedes = millions" SET /A "nb_fichiers_tranche = 99999" SET /A "nb_fichiers_impactes = millions" SET /A "no_fichiers_match = millions" SET /A "cpt_mots_cherch = millions" rem Variables de stockage de libellés d'anomalies : SET "libel1_anom= " SET "libel2_anom=- " SET "libel3_anom= " SET "libel4_anom= " SET "libel5_anom= " SET "marge_cons=- " SET "separ_dos=" rem Indicateurs d'anomalie détectée lors d'un contrôle. SET "indic_anom=0" rem visuel_ecran = affichage(1) ou non(=0) à l'écran des cas d'égalité. SET "visuel_ecran=1" rem Description d'une interligne. SET "interlign=------------------------------------------------------" SET "interlign=%interlign%------------------------" GOTO :EOF rem -----------------FIN : DEFINIT_VAR :TYP_TITRE_TRAIT rem Séquence permettant de déterminer et de titrer le traitement choisi. SET "param_1=C:\" IF "%1" == "" ( SET "lib_typ_trait=RECHERCHE {NON SELECTIVE} SUR RACINE" ) ELSE ( SET "param_1=" CALL :LOOP_PARAM %1 %2 %3 %4 %5 %6 %7 %8 %9 SET "lib_typ_trait=RECHERCHE {SELECTIVE} DANS :" ) IF "!param_1!" == "C:" ( SET "param_1=%CD%" ) GOTO :EOF rem -----------------FIN : TYP_TITRE_TRAIT rem ---------------------------------------------------------------------------- rem Sous-programme de re-construction du nom du repertoire passé en paramètres rem par concaténation dans la variable param_1 des chaînes de caractères rem séparées par un espace.Chacune correspond à un paramètre de passation %1à%9 rem ---------------------------------------------------------------------------- :LOOP_PARAM IF NOT "%1" == "" ( SET "param_1=!param_1!!separ_dos!%1" SET "separ_dos= " SHIFT GOTO LOOP_PARAM ) GOTO :EOF rem -----------------FIN : LOOP_PARAM rem Contrôles de cohérence sur l'environnement nécessaire au traitement. :CONTROLES rem Contrôle de cohérence portant sur le chemin d'accès passé en paramètre. IF NOT EXIST "%param_1%" ( SET "libel2_anom=Le chemin d'acces specifie :" SET "libel3_anom=%param_1%" SET "libel4_anom= est inconnu dans l'arborescence." CALL :MES_ANOM %param_1% ) ELSE ( rem Contrôles de cohérence portant sur le fichier des noms à rechercher. IF NOT EXIST %nomF_CH% ( SET "libel1_anom=Absence du fichier: %nomF_CH%" SET "libel2_anom=Le fichier des noms a rechercher est inconnu dans:" SET "libel3_anom=%CD%." CALL :MES_ANOM %1 ) ) GOTO :EOF rem -----------------FIN : CONTROLES rem -Ecriture dans le fichier et affichage à la console des informations rem relatives à chaque égalité trouvée. :ECRITURE_MATCH SET /A no_fichiers_match+=1 SET chemin=%1 SET chemin=!chemin:"=! SET chemin=!chemin:%nom_ext%=! SET chemin_complet=%1 SET chemin_complet=!chemin_complet:"=! SET "eme=eme." rem Ecriture dans le fichier et affichage à la console des données identi- rem fiant chaque égalité trouvée. IF NOT EXIST %nomF_OUT% ( ECHO {fichier cree par %nom_pgm% Le %DATE% a %TIME% > %nomF_OUT% ECHO { >> %nomF_OUT% ECHO { >> %nomF_OUT% ECHO { %lib_tit% >> %nomF_OUT% ECHO { >> %nomF_OUT% ECHO { %nom_pgm% %lib_typ_trait% >> %nomF_OUT% ECHO { !param_1! >> %nomF_OUT% ECHO { >> %nomF_OUT% ) IF "%cpt_mots_trouves%" == "1" ( ECHO { >> %nomF_OUT% ECHO { >> %nomF_OUT% SET "eme=iere" ) ECHO {!no_fichiers_match:~-4!!interlign! >> %nomF_OUT% SET "lib_aff=a} !nom_ext! (!cpt_mots_trouves!%eme% egalite trouvee:" SET "lib_aff=}!lib_aff! !nom_lib_rech!)" ECHO !lib_aff! >> %nomF_OUT% ECHO }b} !chemin! >> %nomF_OUT% ECHO }c} !chemin_complet! >> %nomF_OUT% ECHO {%interlign%---- >> %nomF_OUT% IF "%visuel_ecran%" == "1" ( ECHO %marge_cons% ECHO %marge1_cons% !no_fichiers_match:~-4! %interlign% SET "lib_aff=%marge_cons%!nom_ext! (!cpt_mots_trouves!%eme%" SET "lib_aff=!lib_aff! egalite trouvee: !nom_lib_rech!)" ECHO !lib_aff! ECHO %marge_cons%!chemin! ECHO %marge_cons%!chemin_complet! ECHO %marge_cons%%interlign% ) GOTO :EOF rem -----------------FIN : ECRITURE_MATCH rem Recherche d'une éventuelle identité entre nom_ext et les noms rem (déjà) présents dans le fichier %nomF_MATCH%. rem Si égalité trouvée ("indic_trouve=1"),le nom du fichier !nom_ext! n'est rem pas écrit dans le fichier %nomF_MATCH%. :CRE_FICH_MATCH IF NOT EXIST %nomF_MATCH% ( ECHO {fichier cree par %nom_pgm% Le %DATE% a %TIME% > %nomF_MATCH% ECHO { >> %nomF_MATCH% ECHO { >> %nomF_MATCH% ECHO { %lib_tit% >> %nomF_MATCH% ECHO { >> %nomF_MATCH% ECHO { %nom_pgm% %lib_typ_trait% >> %nomF_MATCH% ECHO { !param_1! >> %nomF_MATCH% ECHO { >> %nomF_MATCH% ) SET "indic_trouve=0" FOR /F "eol=} tokens=1* delims=" %%K IN (%nomF_MATCH%) DO ( FOR /F %%I IN ( ' ECHO "%%K" ^| FIND /I "%nom_ext%" ' ) DO ( SET "indic_trouve=1" ) ) IF "!indic_trouve!" == "0" ( SET /A "nb_fichiers_impactes+=1" ECHO !nom_ext!>>%nomF_MATCH% ) GOTO :EOF rem -----------------FIN :CRE_FICH_MATCH rem Ecriture dans le fichier et affichage à la console d'un message rem d'anomalie entrainant l'arrêt du traitement. :MES_ANOM SET /A "indic_anom=1" ECHO. >> %nomF_OUT% ECHO. >> %nomF_OUT% ECHO %marge_console%A N O M A L I E. >> %nomF_OUT% ECHO. >> %nomF_OUT% ECHO %marge_cons%%libel1_anom% >> %nomF_OUT% ECHO %marge_cons%%libel2_anom% >> %nomF_OUT% ECHO %marge_cons%%libel3_anom% >> %nomF_OUT% ECHO %marge_cons%%libel4_anom% >> %nomF_OUT% ECHO %marge_cons%%libel5_anom% >> %nomF_OUT% ECHO. >> %nomF_OUT% ECHO %marge_cons% TRAITEMENT IMPOSSIBLE. >> %nomF_OUT% ECHO. >> %nomF_OUT% ECHO %marge_cons% - {Message emanant de %nom_pgm%} - >> %nomF_OUT% ECHO. >> %nomF_OUT% ECHO. ECHO. ECHO %marge_cons%A N O M A L I E. ECHO %marge_cons%%libel1_anom% ECHO %marge_cons%%libel2_anom% ECHO %marge_cons%%libel3_anom% ECHO %marge_cons%%libel4_anom% ECHO %marge_cons%%libel5_anom% ECHO %marge_cons% TRAITEMENT IMPOSSIBLE. ECHO. ECHO %marge_cons% - {Message emanant de %nom_pgm%} - ECHO. GOTO :EOF rem -----------------FIN : MES_ANOM rem Ecriture dans le fichier et affichage à la console d'un message rem d'information concernant le traitement. :INFOS_TITRE ECHO. SET "lib_deb_time=Le %date_deb% a %time_deb% debut du traitement batch" SET "lib_deb_time=%lib_deb_time% %nom_pgm%" ECHO %marge_cons% %lib_deb_time% ECHO. ECHO. SET "lib_tit= RECHERCHE DES FICHIERS CONTENANT AU MOINS UN CRITERE" SET "lib_tit=%lib_tit% D'IDENTIFICATION." ECHO %lib_tit% ECHO. ECHO %nom_pgm% %lib_typ_trait% ECHO !param_1! IF "%visuel_ecran%" == "0" ( ECHO. SET "lib_aff=AFFICHAGE A L ECRAN DES CAS D'EGALITE NON SOUHAITE " SET "lib_aff=!lib_aff! {variable visuel_ecran = %visuel_ecran%}" ECHO %marge_cons% !lib_aff! ) GOTO :EOF rem -----------------FIN : INFOS_DEB rem Ecriture dans le fichier et affichage à la console des informations rem statistiques relatives à l'exécution du programme :STAT_FIN FOR /F %%J IN (%nomF_CH%) DO ( SET /A "cpt_mots_cherch+=1" ) ECHO. ECHO. ECHO. ECHO. ECHO. ECHO. SET "lib_aff=NOMBRE DE CRITERES/MOTS DE RECHERCHE : " SET "lib_aff=%lib_aff%%cpt_mots_cherch:~-5%" ECHO %marge_cons% %lib_aff% ECHO %marge_cons% {Voir la liste dans %nomF_CH%} ECHO. SET "lib_aff=NOMBRE DE FICHIERS ACCEDES : " SET "lib_aff=%lib_aff%%nb_fichiers_accedes:~-5%" ECHO %marge_cons% %lib_aff% ECHO. SET "lib2_aff=NOMBRE DE FICHIERS IMPACTES {au - une egalite} : " SET "lib2_aff=%lib2_aff%%nb_fichiers_impactes:~-5%" ECHO %marge_cons% %lib2_aff% ECHO %marge_cons% {Voir la liste dans %nomF_MATCH%} ECHO. SET "lib_aff=NOMBRE DE CAS D'EGALITE : " SET "lib_aff=%lib_aff%%no_fichiers_match:~-5%" ECHO %marge_cons% %lib_aff% ECHO %marge_cons% {Voir la trace dans %nomF_OUT%} ECHO. ECHO %marge_cons% REPERTOIRE DE TRAVAIL : ECHO %marge_cons% %CD% ECHO. SET "lib_fin_time=Le %DATE% a %TIME% fin du traitement batch" SET "lib_fin_time=%lib_fin_time% %nom_pgm%" ECHO %marge_cons% %lib_fin_time% ECHO { >> %nomF_OUT% ECHO {%lib_deb_time% >> %nomF_OUT% ECHO { >> %nomF_OUT% ECHO {NOMBRE DE FICHIERS ACCEDES: %nb_fichiers_accedes:~-5%>> %nomF_OUT% ECHO { >> %nomF_OUT% ECHO {!lib2_aff! >> %nomF_OUT% ECHO {Voir la liste de noms dans %nomF_MATCH%} >> %nomF_OUT% ECHO { >> %nomF_OUT% ECHO {NOMBRE DE CAS D'EGALITE : %no_fichiers_match:~-5% >> %nomF_OUT% ECHO { >> %nomF_OUT% ECHO {REPERTOIRE DE TRAVAIL : >> %nomF_OUT% ECHO {%CD% >> %nomF_OUT% ECHO { >> %nomF_OUT% ECHO {%lib_fin_time% >> %nomF_OUT% ECHO { >> %nomF_MATCH% ECHO {%lib_deb_time% >> %nomF_MATCH% ECHO { >> %nomF_MATCH% ECHO {NOMBRE FICHIERS ACCEDES: %nb_fichiers_accedes:~-5% >> %nomF_MATCH% ECHO { >> %nomF_MATCH% ECHO {!lib2_aff! >> %nomF_MATCH% ECHO { >> %nomF_MATCH% ECHO {NOMBRE DE CAS D'EGALITE: %no_fichiers_match:~-5% >> %nomF_MATCH% ECHO {Voir la trace des cas d'egalite dans %nomF_OUT%} >> %nomF_MATCH% ECHO { >> %nomF_MATCH% ECHO {REPERTOIRE DE TRAVAIL : >> %nomF_MATCH% ECHO {%CD% >> %nomF_MATCH% ECHO { >> %nomF_MATCH% ECHO {%lib_fin_time% >> %nomF_MATCH% GOTO :EOF rem -----------------FIN : STAT_FIN :END ECHO OFF
Salut, désolé pour ma réaction tardive, mais je viens de découvrir ton message !
C'est sympa d'avoir pris du temps pour tenter de résoudre mon problème, mais je me suis tourné vers une solution plus standard avec le moteur de recherche windows desktop et ça répond à mon besoin
Je n'ai donc pas testé ta solution, mais je regarderais à l'occasion
C'est sympa d'avoir pris du temps pour tenter de résoudre mon problème, mais je me suis tourné vers une solution plus standard avec le moteur de recherche windows desktop et ça répond à mon besoin
Je n'ai donc pas testé ta solution, mais je regarderais à l'occasion
Salut,
En programmation bash (sous linux), ta demande est simple à réaliser, mais il ne pourra pas utiliser des fichiers excel.
Sous windows il faut se tourner sur un autre langage de programmation mais je ne sais pas lequel te conseiller.
En programmation bash (sous linux), ta demande est simple à réaliser, mais il ne pourra pas utiliser des fichiers excel.
Sous windows il faut se tourner sur un autre langage de programmation mais je ne sais pas lequel te conseiller.
Bonjour,
J'ai monté un programme .bat pour coller au mieux au problème. Il est "brut de décoffrage" j'ai fait les tests classiques, mais je ne prétends pas avoir tout exploré. A ton tour de le tester ne serait-ce que pour l'évaluer et voir s'il te convient.
J'ai monté un programme .bat pour coller au mieux au problème. Il est "brut de décoffrage" j'ai fait les tests classiques, mais je ne prétends pas avoir tout exploré. A ton tour de le tester ne serait-ce que pour l'évaluer et voir s'il te convient.
ECHO OFF rem ENVIRONNEMENT : rem 1) Il faut creer un fichier (ici %nomF_CH%) contenant le ou les mot(s) rem de recherche (un SEUL mot recherché par ligne). rem Exemple de fichier %nomF_CH% : rem (Il ne doit pas exister d'espaces DANS un libellé/mot.) rem rem mot1-recherché-trouvé rem mot2-recherché-trouvé rem mot3-re.......-...... rem FONCTIONNEMENT : rem 2) Ensuite il faut ouvrir une invite de commandes et "se positionner" avec rem la commande CD C:\......\.......\ répertoire de travail contenant le rem présent fichier (.bat). rem rem 3) Puis sur la ligne de commande taper le nom de ce fichier : rem a) SEUL (sans paramètre): DANS CE CAS LA RECHERCHE DEBUTE A LA RACINE : rem (nom-de-ce-fichier est équivalent à nom-de-ce-fichier C:\) rem OU rem b) AVEC LE PARAMETRE SUIVANT : C: DANS CE CAS LA RECHERCHE S'EFFECTUE rem UNIQUEMENT SUR LE REPERTOIRE EN COURS : rem nom-de-ce-fichier C: rem OU rem c) SUIVI DE TOUT OU PARTIE DU NOM D'UN CHEMIN LA RECHERCHE S'EFFECTUE rem SUR LE REPERTOIRE NOMME : rem nom-de-ce-fichier C:\Documents and Settings\Christian\Mes documents\ rem suivant que l'on souhaite commencer la recherche depuis la racine du rem disque (ici le disque C) ou pour tout un répertoire. rem Celui-ci peut contenir des sous-répertoires (notion de répertoire rem générique) rem Ce nom doit impérativement être terminé par un \ .Il n'est donc pas rem possible de tronquer un nom de dossier par rexemple : rem nom-de-ce-fichier C:\Documents and Set\ n'est pas permis. rem Le traitement peut être interrompu à tout moment sans risque en pressant rem les touches Ctrl+C. rem rem 4) Le résultat de l'exécution se présente sous la forme de 2 fichiers : rem a) %nomF_OUT% contenant : rem le nom suivi du libellé trouvé, rem le répertoire et le chemin des fichiers présents sur le disque C, pour rem lesquels une correspondance a été trouvée avec l'un des mots présents rem dans la liste des libellés (fichier %nomF_CH%) à rechercher. rem Exemple de fichier %nomF_OUT% : rem fichier cree par chlib Le 13/10/2008 a 12:41:27,37 rem 0001----------------------------------------------------------------------- rem {a} nom1.ext mot1-recherché-trouvé rem {b} C:\Documents and Settings\Christian\Mes documents\BATCH_files\ rem {c} C:\Documents and Settings\Christian\Mes documents\BATCH_files\nom1.ext rem --------------------------------------------------------------------------- rem 0002----------------------------------------------------------------------- rem {a} nom2.ext mot2-recherché-trouvé rem {b} C:\Documents and Settings\Christian\Mes documents\BATCH_files\ rem {c} C:\Documents and Settings\Christian\Mes documents\BATCH_files\nom2.ext rem ---------------------------------------------------------------------------- rem NB. Si plusieurs occurrences d'un MEME MOT apparaissent dans le même rem fichier celui-ci sera nommé (dans le fichier %nomF_OUT)% autant de rem fois que ce mot apparaît SUR DES LIGNES DIFFERENTES. En d'autres rem termes s'il existe, sur la même ligne, plus d'une occurence d'un même rem mot seule la première occurrence sera considérée. rem par contre, si plusieurs MOTS DIFFERENTS apparaissent SUR UNE MEME rem LIGNE d'un même fichier ils seront pris en compte. rem b) %nomF_MATCH% contenant : rem le nom et l'extension de chaque fichier pour lesquels une égalité au rem moins a été trouvée. A l'inverse du fichier %nomF_OUT% chaque fichier rem est nommé une seule fois quelques soient le nombres de cas (> 0) rem d'égalités trouvés. rem Exemple de fichier %nomF_MATCH% : rem fichier cree par chlib Le 13/10/2008 a 12:41:27,35 rem xyz.doc rem aaaa.doc rem liop.doc SETLOCAL ENABLEdelayedExpansion SETLOCAL ENABLEextensions CLS rem répertoire de travail (contient notamment ce fichier.) : CD C:\Documents and Settings\Christian\Mes documents\BATCH_files rem ---------------------------------------------------------------------------- rem SEQUENCE PRINCIPALE rem ---------------------------------------------------------------------------- CALL :DEFINIT_VAR %0 IF EXIST "%nomF_OUT%" ( ERASE %nomF_OUT% ) IF EXIST "%nomF_MATCH%" ( ERASE %nomF_MATCH% ) rem Séquence permettant de déterminer le type de traitement choisi. CALL :TYP_TITRE_TRAIT %1 %2 %3 %4 %5 %6 %7 %8 %9 rem Contrôles de cohérence portant sur l'environnement. CALL :CONTROLES !param_1! IF "!indic_anom!" == "1" ( GOTO :EOF ) rem - BOUCLE PRINCIPALE de lectures des chemins d'accès. rem - EXTRACTION (du chemin d'accès) du nom et de l'extension du fichier. rem - RECHERCHE dans le fichier en cours de la présence de 1 ou plusieurs rem libellés recherchés (libellés présents dans le fichier nomF_CH) FOR /R "%param_1%" %%F IN (*.*) DO ( SET /A "nb_fichiers_accedes+=1" SET "nom_ext=%%~nxF" SET /A "prog_fich=1" FOR /F %%J IN (%nomF_CH%) DO ( FOR /F "tokens=1* delims=" %%K IN ( ' TYPE "%%F" ^| FIND /I "%%J" ' ) DO ( SET "nom_lib_rech=%%J" CALL :CRE_FICH_MATCH CALL :ECRITURE_MATCH "%%F" !nom_ext! ) ) ) ENDLOCAL GOTO :EOF rem -----------------FIN DE LA SEQUENCE PRINCIPALE rem Définition et initialisation des variables utiles au traitement. :DEFINIT_VAR SET "nom_pgm=%1" rem définition des noms des fichiers : rem En INPUT : SET "nomF_CH=%USERNAME:~0,+3%-%nom_pgm%-cherch.txt" rem En OUTPUT : SET "nomF_OUT=%USERNAME:~0,+3%-%nom_pgm%-OUT.txt" SET "nomF_MATCH=%USERNAME:~0,+3%-%nom_pgm%-MATCH.txt" SET /A "millions = 10000000" rem Compteurs pour statistiques d'éxécution : SET /A "nb_fichiers_accedes = millions" SET /A "no_fichiers_match = millions" rem Variables de stockage de libellés d'anomalies : SET "libel1_anom= " SET "libel2_anom=- " SET "libel3_anom= " SET "libel4_anom= " SET "libel5_anom= " SET "marge_cons=- " rem Indicateurs nécessaires au traitement. SET "indic_anom=0" rem Description d'interlignes. SET "interlign=------------------------------------------------------" SET "interlign=%interlign%------------------------" SET "interlign1=------------------------------------------------------" SET "interlign1=%interlign1%----------------------" GOTO :EOF rem -----------------FIN : DEFINIT_VAR :TYP_TITRE_TRAIT rem Séquence permettant de déterminer et de titrer le traitement choisi. SET "param_1=C:\" IF "%1" == "" ( SET "lib_typ_trait=RECHERCHE {NON SELECTIVE} SUR RACINE" ) ELSE ( SET "param_1=" CALL :LOOP_PARAM %1 %2 %3 %4 %5 %6 %7 %8 %9 SET "lib_typ_trait=RECHERCHE {SELECTIVE} DANS" ) GOTO :EOF rem -----------------FIN : TYP_TITRE_TRAIT rem ------------------------------------------------------------------------ rem Sous-programme de construction du nom du repertoire passé en paramètres rem par concaténation dans la variable rep des noms séparés par un espace. rem ------------------------------------------------------------------------ :LOOP_PARAM IF NOT "%1" == "" ( SET "param_1=!param_1!!separ_dos!%1" SET "separ_dos= " SHIFT GOTO LOOP_PARAM ) rem Fin du Sous-programme. Retour après la commande: CALL :LOOP_PARAM GOTO :EOF rem -------------------------------------------------------------------- rem Contrôles de cohérence sur l'environnement nécessaire au traitement. :CONTROLES rem Ces contrôles ne sont pas effectués si la recherche porte sur rem l'extension. ex.: CH cherchrep txt * rem Contrôle de cohérence portant sur le chemin d'accès passé en paramètre. IF NOT EXIST "%param_1%" ( SET "libel2_anom=Le chemin d'acces specifie :" SET "libel3_anom=%param_1% SET "libel4_anom= est inconnu dans l'arborescence." CALL :MES_ANOM %param_1% ) ELSE ( rem Contrôles de cohérence portant sur le fichier des noms à rechercher. IF NOT EXIST %nomF_CH% ( SET "libel1_anom=Absence du fichier: %nomF_CH%" SET "libel2_anom=Le fichier des noms a rechercher est inconnu dans:" SET "libel3_anom=%CD%." CALL :MES_ANOM %1 ) ) GOTO :EOF rem -----------------FIN : CONTROLES rem -Ecriture dans le fichier et affichage à la console des informations rem relatives à chaque égalité trouvée. :ECRITURE_MATCH SET /A no_fichiers_match+=1 SET chemin=%1 SET chemin=!chemin:"=! SET chemin=!chemin:%2=! SET chemin_complet=%1 SET chemin_complet=!chemin_complet:"=! rem Ecriture dans le fichier et affichage à la console des données identi- rem fiant chaque égalité trouvée. IF NOT EXIST %nomF_OUT% ( ECHO fichier cree par %nom_pgm% Le %DATE% a %TIME% > %nomF_OUT% ECHO. >> %nomF_OUT% ECHO. >> %nomF_OUT% ) ECHO !no_fichiers_match:~-4!!interlign1! >> %nomF_OUT% ECHO {a} !nom_ext! !nom_lib_rech! >> %nomF_OUT% ECHO {b} !chemin! >> %nomF_OUT% ECHO {c} !chemin_complet! >> %nomF_OUT% ECHO %interlign%-- >> %nomF_OUT% ECHO %marge_cons% ECHO %marge1_cons%!no_fichiers_match:~-4! !interlign! ECHO %marge_cons%!nom_ext! mot recherche: !nom_lib_rech! ECHO %marge_cons%!chemin! ECHO %marge_cons%!chemin_complet! ECHO %marge_cons%%interlign%- GOTO :EOF rem -----------------FIN : ECRITURE_MATCH rem Recherche d'identités entre nom_ext et l'un des noms (déjà) présents rem dans le fichier %nomF_MATCH%. Si égalité trouvée ("indic_trouve=1"),le rem nom du fichier !nom_ext! n'est pas écrit dans le fichier %nomF_MATCH%. :CRE_FICH_MATCH IF NOT EXIST %nomF_MATCH% ( ECHO fichier cree par %nom_pgm% Le %DATE% a %TIME% > %nomF_MATCH% ECHO. >> %nomF_MATCH% ECHO. >> %nomF_MATCH% ) SET "indic_trouve=0" FOR /F %%K IN (%nomF_MATCH%) DO ( IF /I %%K == !nom_ext! ( SET "indic_trouve=1" )) IF "!indic_trouve!" == "0" ( ECHO !nom_ext!>>%nomF_MATCH% ) GOTO :EOF rem -----------------FIN :CRE_FICH_MATCH rem Ecriture dans le fichier et affichage à la console d'un message rem d'anomalie entrainant l'arrêt du traitement. :MES_ANOM SET /A "indic_anom=1" ECHO. >> %nomF_OUT% ECHO. >> %nomF_OUT% ECHO %marge_console%A N O M A L I E. >> %nomF_OUT% ECHO. >> %nomF_OUT% ECHO %marge_cons%%libel1_anom% >> %nomF_OUT% ECHO %marge_cons%%libel2_anom% >> %nomF_OUT% ECHO %marge_cons%%libel3_anom% >> %nomF_OUT% ECHO %marge_cons%%libel4_anom% >> %nomF_OUT% ECHO %marge_cons%%libel5_anom% >> %nomF_OUT% ECHO. >> %nomF_OUT% ECHO %marge_cons% TRAITEMENT IMPOSSIBLE. >> %nomF_OUT% ECHO. >> %nomF_OUT% ECHO %marge_cons% - {Message emanant de %nom_pgm%} - >> %nomF_OUT% ECHO. >> %nomF_OUT% ECHO. ECHO. ECHO %marge_cons%A N O M A L I E. ECHO %marge_cons%%libel1_anom% ECHO %marge_cons%%libel2_anom% ECHO %marge_cons%%libel3_anom% ECHO %marge_cons%%libel4_anom% ECHO %marge_cons%%libel5_anom% ECHO %marge_cons% TRAITEMENT IMPOSSIBLE. ECHO. ECHO %marge_cons% - {Message emanant de %nom_pgm%} - ECHO. GOTO :EOF rem -----------------FIN : MES_ANOM