Question très technique
Résolu
parislover25
Messages postés
50
Statut
Membre
-
parislover25 Messages postés 50 Statut Membre -
parislover25 Messages postés 50 Statut Membre -
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
- Pcs problème technique aujourd'hui ✓ - Forum Vos droits sur internet
- Mytf1 un problème technique est survenu ✓ - Forum Réseaux sociaux
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