Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 2
Aller à la page: 1, 2  >
Rechercher et lister
Auteur Message
Répondre en citant
Message Rechercher et lister 
Bonjour à tous,

Je me galère un peu pour trouver un moyen de lister tous les dossiers contenant certaines informations. je m'explique :

Dans un répertoire (nommé TEST) j'ai plusieurs dossiers (nommés 1, 2, 3, ....1000, 1001, 1002 etc...) dans tous ces dossiers j'ai plusieurs fichiers dont un toujours nommé pareil (mais différent d'un dossier à l'autre), un fichier nommé "docte" (qui est fichier éditable, équivalant à un txt). Tous les dossiers possédent donc leur propre fichier "docte".

certains de ces fichiers "docte" possèdent une chaine de caractères "RENE".



Je cherche un petit utilitaire, une petite moulinette, capable de me lister tous les dossiers contenant des docte qui possèdent eux meme la chaine de caractères "RENE"

Pouvez vous m'aider?



Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message Rechercher et lister 
Salut Wink

Si je comprends bien, tout les fichiers textes "docte" ont RENE dans leurs contenue ?
Il va falloir que tu me donne l'extension de fichier exact, ainsi qu'un exemple du contenue d'un de ces fichiers (est-ce que ils ne contiennent uniquement "RENE" dans le fichier ? Ou il a y d'autres chaines de caractères ?).

J'ai déjà une petite idée je n'attends plus que ta réponse Wink




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message Rechercher et lister 
Cherche dans Google Local_search_engine.bat




______________________________________________________
Mes Contributions en Téléchargement
Répondre en citant
Message re: 
salut Xenoxis

non la chaine de caracteres "RENE" n'est présente que dans certains fichiers docte.

c'est pour ça que je souhaite lister les dossiers qui contiennent des docte qui contiennent eux, la chaîne de caractères "RENE"

les autres dossiers contenant des docte qui ne contiennent pas cette chaîne de caractères ne m’intéressent pas.




les docte sont des fichiers nommé "docte" et ayant pour extension docte... en fait ce sont des fichiers propre au logiciel Wiplink. ces fichiers docte sont des fichiers équivalent à des txt, éditable avec notepad++.



Répondre en citant
Message Rechercher et lister 
Voilà le code que tu attendais je pense Mr. Green


Code:
@echo off&setlocal EnableDelayedExpansion&chcp 28591 > nul
title Créé par Flammrock
 
set /a nb_docte=0
set /a nb_docte_RENE=0
echo;Début du traitement :&echo;&echo;
type nul>list.txt
for /f "tokens=*" %%a in ('dir /b/s /a:-d *docte') do (
  echo;%%~a {
  set /a nb_docte+=1
  find /v "RENE" "%%~a">nul
  if not "!errorlevel!"=="0" (
    set /a nb_docte_RENE+=1
    echo;     Contient la chaîne de caractère 'RENE' : VRAI
    echo;%%~a >> list.txt
   echo;     Chemin du fichier enregistré dans : 'list.txt'
  ) else (
    echo;     Contient la chaîne de caractères 'RENE' : FAUX
  )
  echo;}&echo;&echo;
)
echo;Traitement terminé&start "" notepad list.txt
echo;&echo;Nombre total de fichiers en .docte : !nb_docte!
echo;Nombre total de fichiers .docte contenant la chaîne de catactères 'RENE' : !nb_docte_RENE!
>nul ping -n -1 localhost




Dernière édition par Flammrock le Sam 4 Fév 2017 - 00:47; édité 2 fois

______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message Rechercher et lister 
EDIT : Flamm' a posté quelques minutes avant moi, pendant que je faisais mes tests, mon message étant déjà rédigé ça m'a averti quand j'ai cliqué sur envoyer Mr. Green

Hum... une boucle FOR liée à un DIR/B avec une autre boucle qui TYPE le fichier avec un FIND/I peut être?
Code:
@echo off

:: Extention inconnue ou non existante? - variables à adapter :
set fichier=docte
set recherche=RENE

:: écrase le fichier si il existe
echo.>liste.log

echo.
echo En cours...
echo patientez jusqu'… l'ouverture du fichier contenant la liste...

:: Parcourt tous les dossiers :
for /f "tokens=*" %%A in ('dir /b') do (

:: Ouvre le fichier s'il existe et y recherche la chaîne :
    if exist "%%A\%fichier%" (
        for /f "tokens=*" %%Z in ('type "%%A\%fichier%" ^| find /i "%recherche%"') do (
            echo %%A >>liste.log
        )
    )

)

echo.
echo Termin‚!
echo le fichier s'ouvre...
start "" notepad liste.log
pause
exit





______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :
Visiter le site web du posteur Skype
Répondre en citant
Message Rechercher et lister 
Hugo7 a écrit:
EDIT : Flamm' a posté quelques minutes avant moi, pendant que je faisais mes tests, mon message étant déjà rédigé ça m'a averti quand j'ai cliqué sur envoyer Mr. Green


Désolé Laughing Okay

Hugo7 a écrit:
Code:
:: écrase le fichier si il existe
echo.>liste.log


Tu peux tous simplement faire ça :
Code:
type nul>liste.log





______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message Rechercher et lister 
Salut Laughing

Voici ma contribution inspiré par Local_Search_Engine.bat

Code:
ECHO OFF
REM This Script is written by (c) Hackoo 2016 on 19/09/2016
Title Scan a folder and Search a string in multi-files by (c) Hackoo 2016
mode con cols=75 lines=2
Call :init
rem Call :CountingExecution
Call :inputbox "Please enter something to search :" "Search a string in multi-files by (c) Hackoo 2016"
If  "%input%" == ""  Color 0C & (
   echo(
   echo           You must enter a string to continue with this program
   pause>nul & exit
) else (
   Call :Browse4Folder "Choose source folder to scan for %input%" "c:\scripts"
)
::******************************************************************************************
Set "ROOT=%Location%"
::Does string have a trailing back slash ? if yes, so, we remove it !
IF %ROOT:~-1%==\ SET ROOT=%ROOT:~0,-1%
:: txt vbs js json hta php htm html xml csv rtf
SET "EXT=docte"
SET "Count=0"
set "Word2Search=%input%"
Set "NewFolder2Copy=%userprofile%\Desktop\CopyFiles_%Word2Search%"
Set "LogFile=%~dp0%~n0_%Word2Search%.txt"
SETLOCAL enabledelayedexpansion
REM Iterates throw the files on this current folder and its subfolders.
REM And Populate the array with existent files in this folder and its subfolders
For %%a in (%EXT%) Do (
   Call :Scanning "%Word2Search%" "*.%%a"
   Call :PS_Sub 'information' 10 '"Scanning now for """%Word2Search%""" on """*.%%a""" . . . "' "'Please wait. . . Scan is in progress on all """*.%%a""" . . .'" 'info' 5
   FOR /f "delims=" %%f IN ('dir /b /s "%ROOT%\*.%%a"') DO (
      ( find /I "%Word2Search%" "%%f" >nul 2>&1 ) && (
         SET /a "Count+=1"
         set "list[!Count!]=%%~nxf"
         set "listpath[!Count!]=%%~dpFf"
      )
   ) || (
         ( Call :Scanning "%Word2Search%" "%%~nxf" )
   )
)
::*******************************************************************
:Display_Results
cls & color 0B
echo wscript.echo Len("%ROOT%"^) + 20 >"%tmp%\length.vbs"
for /f %%a in ('Cscript /nologo "%tmp%\length.vbs"') do ( set "cols=%%a")
If %cols% LSS 50 set /a cols=%cols% + 24
rem If %cols% LSS 50 set /a cols=%cols% + 15
set /a lines=%Count% + 17
Mode con cols=%cols% lines=%lines%
echo(
Call :color 0A " ------------------------------------------------" 1
ECHO   Folder : "%ROOT%"
Call :color 0A " ------------------------------------------------" 1
rem If Exist "%LogFile%" Del "%LogFile%"
rem Display array elements
for /L %%i in (1,1,%Count%) do (
   set "msg=[%%i] - !list[%%i]!"
   echo !msg!
)
ECHO(
ECHO Total of [%EXT%] files(s) that contains
Echo the string "%Word2Search%" is : %Count% file(s)
echo.
Call :color 0D "Type the number of file that you want to explore" 1
echo(
Call :color 0C "To save results into a LogFile just type 'LOG'" 1
echo(
Call :color 0A "To copy all files found just type 'Copy'" 1
set /p "Input="
For /L %%i in (1,1,%Count%) Do (
    If "%INPUT%" EQU "%%i" (
        Call :Explorer "!listpath[%%i]!"
    )
   IF /I "%INPUT%"=="Log" (
      Call :Save_Results
   )
   IF /I "%INPUT%"=="Copy" (
      Call :CopyFiles
   )
)   
Goto:Display_Results
::****************************************************************************
:Save_Results
If Exist "%LogFile%" Del "%LogFile%"
rem Display array elements and save results into the LogFile
(
   Echo   ------------------------------------------------
   ECHO   Folder : "%ROOT%"
   echo   ------------------------------------------------
)>"%LogFile%"

for /L %%i in (1,1,%Count%) do (
   set "msg=[%%i] - !list[%%i]!"
   echo !msg! -- "!listpath[%%i]!" >> "%LogFile%"
)

(    
   ECHO.
   ECHO Total of [%EXT%] files(s^) : %Count% file(s^) that contains the string "%Word2Search%"
)>> "%LogFile%"
Start "" "%LogFile%"
Goto:Display_Results
::****************************************************************************
:Scanning <Word> <file>
mode con cols=75 lines=3
Cls & Color 0A
echo(
echo         Scanning for the string "%~1" on "%~2" ...
goto :eof
::****************************************************************************
:Explorer <file>
explorer.exe /e,/select,"%~1"
Goto :EOF
::****************************************************************************
:init
prompt $g
for /F "delims=." %%a in ('"prompt $H. & for %%b in (1) do rem"') do set "BS=%%a"
exit /b
::****************************************************************************
:color
set nL=%3
if not defined nL echo requires third argument & pause > nul & goto :eof
if %3 == 0 (
    <nul set /p ".=%bs%">%2 & findstr /v /a:%1 /r "^$" %2 nul & del %2 2>&1 & goto :eof
) else if %3 == 1 (
    echo %bs%>%2 & findstr /v /a:%1 /r "^$" %2 nul & del %2 2>&1 & goto :eof
)
exit /b
::***************************************************************************
:Browse4Folder
set Location=
set vbs="%temp%\_.vbs"
set cmd="%temp%\_.cmd"
for %%f in (%vbs% %cmd%) do if exist %%f del %%f
for %%g in ("vbs cmd") do if defined %%g set %%g=
(
    echo set shell=WScript.CreateObject("Shell.Application"^)
    echo set f=shell.BrowseForFolder(0,"%~1",0,"%~2"^)
    echo if typename(f^)="Nothing" Then 
    echo wscript.echo "set Location=Dialog Cancelled"
    echo WScript.Quit(1^)
    echo end if
    echo set fs=f.Items(^):set fi=fs.Item(^)
    echo p=fi.Path:wscript.echo "set Location=" ^& p
)>%vbs%
cscript //nologo %vbs% > %cmd%
for /f "delims=" %%a in (%cmd%) do %%a
for %%f in (%vbs% %cmd%) do if exist %%f del /f /q %%f
for %%g in ("vbs cmd") do if defined %%g set %%g=
goto :eof
::***************************************************************************
:CountingExecution
Setlocal enabledelayedexpansion
Title Count the number of times my BATCH file is run
Mode Con Cols=60 lines=5 & color 0E
set /a count=1
set "FileCount=%tmp%\%~n0.txt"
If Not exist "%FileCount%" (
   echo !count! > "%FileCount%"
) else (
   For /F "tokens=*" %%a in ('Type "%FileCount%"') Do (
      set /a count=!count! + %%a
      echo !count! > "%FileCount%"
   )
)
echo.
echo      This batch script is running for "!count! time(s)"
echo(
Call :Color 0C "           - - - Hit any key to continue - - -" 1
EndLocal
pause>nul
::***************************************************************************
:InputBox
set "input="
set "heading=%~2"
set "message=%~1"
echo wscript.echo inputbox(WScript.Arguments(0),WScript.Arguments(1)) >"%temp%\input.vbs"
for /f "tokens=* delims=" %%a in ('cscript //nologo "%temp%\input.vbs" "%message%" "%heading%"') do (
   set "input=%%a"
)
exit /b
::***************************************************************************
:PS_Sub $notifyicon $time $title $text $icon $Timeout
PowerShell  ^
  [reflection.assembly]::loadwithpartialname('System.Windows.Forms') ^| Out-Null; ^
 [reflection.assembly]::loadwithpartialname('System.Drawing') ^| Out-Null; ^
 $notify = new-object system.windows.forms.notifyicon; ^
  $notify.icon = [System.Drawing.SystemIcons]::%1; ^
  $notify.visible = $true; ^
  $notify.showballoontip(%2,%3,%4,%5); ^
  Start-Sleep -s %6; ^
  $notify.Dispose()
%End PowerShell%
exit /B
::****************************************************************************
:MakeCopy <Source> <Target>
If Not Exist "%~2\" MD "%~2\"
Copy /Y "%~1" "%~2\"
goto :eof
::****************************************************************************
:CopyFiles
cls
mode con cols=80 lines=20
for /L %%i in (1,1,%Count%) do (
   echo Copying "!list[%%i]!" "%NewFolder2Copy%\"
   Call :MakeCopy   "!listpath[%%i]!" "%NewFolder2Copy%">nul 2>&1
)
Call :Explorer "%NewFolder2Copy%\"
Goto:Display_Results
::*****************************************************************************





______________________________________________________
Mes Contributions en Téléchargement
Répondre en citant
Message super !!! 
super merci beaucoup !!!

j'ai testé 2 moulinettes celle de Flammrock et celle de Hugo7. Malheureusement celle de Flammrock ne détecte pas la chaine de caractères. Pour chaque document analysé le résultat est faux alors que je sais qu'il y a certains docte contenant la chaine de caractères recherchée.

La moulinette d'Hugo7 fonctionne nickel !!! c'est super.

Merci beaucoup !!! Mr. Green Okay



Répondre en citant
Message Re: super !!! 
Variotrail a écrit:
super merci beaucoup !!!

j'ai testé 2 moulinettes celle de Flammrock et celle de Hugo7. Malheureusement celle de Flammrock ne détecte pas la chaine de caractères. Pour chaque document analysé le résultat est faux alors que je sais qu'il y a certains docte contenant la chaine de caractères recherchée.

La moulinette d'Hugo7 fonctionne nickel !!! c'est super.

Merci beaucoup !!! Mr. Green Okay

Et ma moulinette n'est pas testé ou bien elle est invisible Sad




______________________________________________________
Mes Contributions en Téléchargement
Répondre en citant
Message Rechercher et lister 
salut Hackoo,

je viens de la tester. Le concept de ta moulinette est génial mais elle ne détecte pas les docte car elle cherche les .docte . Or j'ai fait une erreur précédemment dans ma description en disant que c'était des docte.docte . C'est faux voir pièce jointe.




Peux tu la modifier?



Répondre en citant
Message Rechercher et lister 
salut Hugo7,

je vais utiliser ta moulinette. Par contre si je veux que la moulinette soit placée dans un tout autre répertoire que là ou se trouve tous les dossiers, comment puis-je lui donner un chemin cible pour aller éxécuter la boucle de recherche?

Deuxième question: comment puis je lui donner le chemin d'un dossier, qui contient des dossiers (1, 2, 3, 4....500), qui eux meme contiennent d'autres dossiers (1, 2, 3....500), qui eux contiennent les docte?





Répondre en citant
Message Rechercher et lister 
Variotrail a écrit:
salut Hackoo,

je viens de la tester. Le concept de ta moulinette est génial mais elle ne détecte pas les docte car elle cherche les .docte . Or j'ai fait une erreur précédemment dans ma description en disant que c'était des docte.docte . C'est faux voir pièce jointe.




Peux tu la modifier?


A ba c'est sur, si t'es pas clair dès le départ aussi..

Voilà ceci fonctionne :
(J'ai juste enlevé 1 caractère omg)

Code:
@echo off&setlocal EnableDelayedExpansion&chcp 28591 > nul
title Créé par Flammrock
 
set /a nb_docte=0
set /a nb_docte_RENE=0
echo;Début du traitement :&echo;&echo;
type nul>list.txt
for /f "tokens=*" %%a in ('dir /b/s /a:-d docte') do (
  echo;%%~a {
  set /a nb_docte+=1
  find /v "RENE" "%%~a">nul
  if not "!errorlevel!"=="0" (
    set /a nb_docte_RENE+=1
    echo;     Contient la chaîne de caractère 'RENE' : VRAI
    echo;%%~a >> list.txt
   echo;     Chemin du fichier enregistré dans : 'list.txt'
  ) else (
    echo;     Contient la chaîne de caractères 'RENE' : FAUX
  )
  echo;}&echo;&echo;
)
echo;Traitement terminé&start "" notepad list.txt
echo;&echo;Nombre total de fichiers en .docte : !nb_docte!
echo;Nombre total de fichiers .docte contenant la chaîne de catactères 'RENE' : !nb_docte_RENE!
>nul ping -n -1 localhost





______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message Re: Rechercher et lister 
Variotrail a écrit:
si je veux que la moulinette soit placée dans un tout autre répertoire que là ou se trouve tous les dossiers, comment puis-je lui donner un chemin cible pour aller éxécuter la boucle de recherche?


Un peu de modif dans la boucle for, on ajoute un chemin dans le DIR/B et on met ce chemin avant chaque %%A, complète le chemin à la ligne 8 suivant l'explication
Code:
@echo off
 
:: Extention inconnue ou non existante? - variables ?  adapter :
set fichier=docte
set recherche=RENE

:: Exemple : si ce batch est placé dans C:\user\%username%\, et que les dossiers à traiter sont sur le bureau,
:: Le ".\" est très important, ça évite une erreur si un fichier est nommé "Desktop", avec le ".\" on montre bien au batch que c'est un dossier qu'on cherche
set dossier=.\Floup
 
:: écrase le fichier si il existe
echo.>liste.log
 
echo.
echo En cours...
echo patientez jusqu'… l'ouverture du fichier contenant la liste...
 
:: Parcourt tous les dossiers :
for /f "tokens=*" %%A in ('dir /b "%dossier%"') do (
 
:: Ouvre le fichier s'il existe et y recherche la chaîne :
    if exist "%dossier%\%%A\%fichier%" (
        for /f "tokens=*" %%Z in ('type "%dossier%\%%A\%fichier%" ^| find /i "%recherche%"') do (
            echo %dossier%\%%A >>liste.log
        )
    )
 
)
 
echo.
echo Termin‚!
echo le fichier s'ouvre...
start "" notepad liste.log
pause
exit


Pour ta deuxième question, c'est exactement le même principe mais avec une boucle for dans la boucle for, je suis sûr qu'avec le code tu peux trouver par toi-même ^^'
Le principe :
For %%A qui parcourt les dossiers parents (1, 2, 3, etc) {
....For %%B qui parcourt les dossiers fils (1\1, 1\2, 1\3, 2\1, 2\2, etc) {
........Le if qu'on touche pas, à part qu'il faille mettre %dossier%\%%A\%%B\ à la place de %dossier%\%%A à chaque fois
....}
}
Okay




______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :
Visiter le site web du posteur Skype
Répondre en citant
Message Rechercher et lister 
Salut,

Mad Un truc m'échape... comment lui faire ouvrir les dossiers qui se trouvent dans mon dossier initial "0"
Je pense qu'il me manque un truc sur le %%B et sur le %%C.... Non??
Sad


@echo off

:: Extention inconnue ou non existante? - variables ? adapter :
set fichier=docte
set recherche=RELE-RECO

:: Exemple : si ce batch est placé dans C:\user\%username%\, et que les dossiers à traiter sont sur le bureau,
:: Le ".\" est très important, ça évite une erreur si un fichier est nommé "Desktop", avec le ".\" on montre bien au batch que c'est un dossier qu'on cherche

:: écrase le fichier si il existe
echo.>liste.log

echo.
echo En cours...
echo patientez jusqu'… l'ouverture du fichier contenant la liste...

:: Parcourt tous les dossiers :
for /f "tokens=*" %%A in ('dir /b "C:\Users\Documents\0"') do (
for /f "tokens=*" %%B in ('dir /b') do (
for /f "tokens=*" %%C in ('dir /b') do (

:: Ouvre le fichier s'il existe et y recherche la chaîne :
if exist "%%A\%%B\%%C\%fichier%" (
for /f "tokens=*" %%Z in ('type "%%A\%%B\%%C\%fichier%" ^| find /i "%recherche%"') do (
echo %%C\ >>liste.log
)
)
)
)

)

echo.
echo Termin‚!
echo le fichier s'ouvre...
start "" notepad liste.log
pause
exit



Message Rechercher et lister 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 2
Aller à la page: 1, 2  >
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch