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   -
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 !!
Configuration: Windows XP
Internet Explorer 6.0

4 réponses

  1. cchristian Messages postés 928 Statut Membre 131
     
    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.

        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


    1
  2. parislover25 Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
     
    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
    0
  3. oupsman Messages postés 319 Statut Membre 10
     
    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.
    -1
  4. cchristian Messages postés 928 Statut Membre 131
     
    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.

        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
    

    -1