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 !!

4 réponses

cchristian Messages postés 921 Date d'inscription   Statut Membre Dernière intervention   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
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
oupsman Messages postés 316 Date d'inscription   Statut Membre Dernière intervention   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
cchristian Messages postés 921 Date d'inscription   Statut Membre Dernière intervention   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