Page 1 sur 1

Recherche de fichier à partir d'un nom et/ou d'une extension

Posté : 08 août 2008 21:24
par Bigfish
Bonjour,

Voici une solution pour trouver le chemin d'un fichier dont on connait le nom:

Noter qu'il est possible d'utiliser le joker(*) dans le nom du fichier recherché pour remplacer 0 ou plusieurs caracteres

mise à jour du 28-10-08
J'ai ajouté la possibilité de faire une recherche a partir de nom de fichier et chemin
qui contiennent des espaces.

mise à jour du 07-11-08
l'aide integrée prend en compte le nom du bat lui meme

mise à jour du 17-11-08
petite correction pour ameliorer la recherche a partir de nom de fichier et chemin
contenant des espaces. Mise a jour de l'aide integrée.

Code : Tout sélectionner

@echo off
rem -----------------------------------------------
rem commande batch search
rem cree par Bigfish alias Philippe E
rem le 08-08-08
rem mis a jour le 17-11-08
rem -----------------------------------------------

rem pour eviter que la nouvelle recherche si elle est infructueuse ne renvoi le resultat de la recherche precedente
set myfilepath=

rem on verifi si un parametre a ete specifie
rem le signe ~ supprime les double-quotes du parametre
if not "%~1"=="" goto start

rem si pas de parametre
goto error

:start
rem on recupere les parametres
if /i "%~1"=="/?" goto help

set myfile=%~1

rem le chemin a t'il ete specifie ?
if /i "%~2"=="" goto initin

rem si un chemin a ete specifie
set in=%~2
goto next

rem si pas de chemin specifie on recupere le disque systeme
:initin
set in=%SYSTEMDRIVE%\

:next
echo Searching for file "%myfile%" in "%in%"
echo Please Wait...
echo.

rem  cette ligne recherche myfile dans le disque ou chemin specifie et met le resultat dans la variable myfilepath
for /r "%in%" %%d in (*"%myfile%") do set myfilepath=%%d

rem on verifi que quelque chose a bien ete trouve
if /i "%myfilepath%" == "" goto rientrouve

echo %myfilepath%
echo.
goto fin

:rientrouve
echo no file found !
echo please check the file or the path specified
echo.
goto fin

:help
set NomCommande=%~n0
echo %NomCommande% file
echo.
echo %NomCommande% [/?] filename [drive:][path]
echo %NomCommande% [/?] "filename" ["drive:path"]
echo.
echo     filename    Specifies the file to search
echo     drive:      Optional if no path specified
echo.
echo     Note that if no drive and path have been specified,
echo     the research will be done in the system drive
echo.
echo     you can use a quoted string in order to specify a file name
echo     or path that contains space:
echo.
echo     %NomCommande% "My file Name.txt" "c:\program files\"
echo.
echo     You can also use the asterisk(*) as a substitute for zero or more
echo     characters.
echo.
echo     %NomCommande% My*file*.txt "c:\program files\"
goto fin

:error
echo The syntax of the command is incorrect.
echo.

:fin
rem pause

rem @33ddI7IHd
 
Comment utiliser cette commande :

creez un fichier.bat par exemple : Recherche.bat puis copier coller le code ci-dessus. n'oubliez pas de sauver.
En suite ouvrez une cmd et placer vous dans le repertoire qui contient votre fichier recherche.bat.
Enfin pour faire une recherche du fichier notepad.exe, par exemple, tapper :

recherche notepad.exe c:\windows\

Attention : si il y a plus d'une version du fichier recherché, dans la zone de recherche (pour l'exemple le disque c:\windows\) seul le dernier trouvé sera pris en compte.
Attention (bis) : dans le code, le jocker * devant la variable %myfile% a la ligne for /r %in% %%d in (*%myfile%) do set myfilepath=%%d est O B L I G A T O I R E !

Si vous voulez utiliser cette commande via la boite de dialogue "executer" de windows il vous faudra enlever le rem devant le pause en fin de fichier.

A+:)

33ddI7IHd

Re: Recherche d'un fichier

Posté : 21 nov. 2008 19:58
par Bigfish
Bonjour,

Cette nouvelle version permet de retrouver toutes les occurrences du fichier recherché. Le resultat de recherche peut maintenant etre ecrit dans un fichier.

Cette version etant plus compexe que les precedentes il vous faudras faire tres attention à la syntaxe et notamment aux double-quotes qui sont primordiales pour
le bon fonctionnement de ce code.

J'ai normalement debugué ce code mais il est possible que je soit passé a coté de certain. Donc si vous rencontrez un probleme merci de m'en faire part par MP de preference.


Noter que comme dans la version precedente, il est possible d'utiliser le joker(*) dans le nom du fichier recherché pour remplacer 0 ou plusieurs caracteres. Avec cette nouvelle version
l'utilisation du joker en plus le l'option /a vous permettras par exemple de retrouver touts les fichier text d'un repertoire.

par exemple en supposant que le batch se nome recherche.bat

recherche /a *.txt c:\windows "/d:c:\temp\resultat recherche.txt"

Code : Tout sélectionner

@echo off
rem -----------------------------------------------
rem commande batch search
rem cree par Bigfish alias Philippe E
rem le 08-08-08
rem mis a jour le 18-11-08
rem V3.0
rem -----------------------------------------------

rem initialisation des variables
set myfilepath=
set multiresult=false
set compteur=0
set destination=
set in=
set nosearchpath=false

rem on verifi qu'un parametre a ete specifie
rem le signe ~ supprime les double-quotes du parametre
if not "%~1"=="" goto start

rem si pas de parametre
goto error

:start
rem on recupere les parametres
if "%~1"=="/" goto error
if /i "%~1"=="/?" goto help
if /i "%~1"=="/a" (
    set multiresult=true
    set myfile=%~2
    
    rem y a t'il un 3ieme parametre ?
    if "%~3"=="" goto initin

    rem si un chemin a ete specifie
    set in=%~3

    call :parametre %3 %4
    goto next
) else (
    set myfile=%~1

    rem y a t'il un 2ieme parametre ?
    if "%~2"=="" goto initin

    rem le 2ieme parametre est-il le chemin de recherche ?
    set in=%~2

    call :parametre %2 %3
    goto next
)

rem si pas de chemin specifie on recupere le disque systeme
:initin
set in=%SYSTEMDRIVE%\

:next
echo.
echo Searching for file "%myfile%" in "%in%"
echo Please Wait...
echo.

rem  ces lignes recherchent myfile dans le disque ou chemin specifie et met le resultat dans la variable myfilepath ou dans le fichier specifié
if %multiresult%==true for /r "%in%" %%i in (*"%myfile%") do call :multiresultat "%%i"
if %multiresult%==false for /r "%in%" %%i in (*"%myfile%") do set myfilepath=%%i

rem on verifi que quelque chose a bien ete trouve
if %multiresult%==true (
    if %compteur%==0 goto rientrouve
    if %compteur%==1 echo %compteur% file found
    if %compteur% gtr 1 echo %compteur% files found
) else (
    if /i "%myfilepath%"=="" goto rientrouve
    if /i not "%destination%"=="" echo %myfilepath%>"%destination%"
    echo %destination%
    echo %myfilepath%   
)
echo.
goto fin

rem si aucun fichier
:rientrouve
echo no file found !
echo please check the file or the path specified
echo.
goto fin


rem si l'option /a a ete specifiee
:multiresultat
set /a compteur=compteur+1
echo %~1
if /i "%destination%"=="" goto fin
if %compteur%==1 echo %~1>"%destination%" 
if %compteur% gtr 1 echo %~1>>"%destination%"
goto fin

:parametre
set bob=%~1
set bob=%bob:~0,3%
if /i "%bob%"=="/d:" (
    set nosearchpath=true
    set in=%SYSTEMDRIVE%\
) else (
    set nosearchpath=false
)
if %nosearchpath%==true call :extractdestinationpath %1
if %nosearchpath%==false call :extractdestinationpath %2
goto fin

rem extraction du chemin de destination
:extractdestinationpath
if "%~1"=="" goto fin
set destination=%~1
set destination=%destination:~3%
goto fin


:help
set NomCommande=%~n0
echo %NomCommande% file
echo.
echo %NomCommande% [/?] [/A] filename [drive:][path] [/D:destination]
echo %NomCommande% [/?] [/A] "filename" ["drive:path"] ["/D:destination"]
echo.
echo     /A           Returns all the files found. If omitted, only the
echo                  last one found will be returned
echo     filename     Specifies the file to search
echo     drive:       Optional if no path specified
echo.
echo     Note that if no drive and path have been specified,
echo     the research will be done in the system drive
echo.
echo     /D:          Destination switch
echo     destination  Specifies the location and name of the file in where the 
echo                  results will be written.
echo.
echo     You can use a quoted string in order to specify a file name
echo     or path that contains space:
echo.
echo     %NomCommande% "My file.txt" "c:\program files\" "/D:c:\My folder\Result file.txt"
echo.
echo     You can also use the asterisk(*) as a substitute for zero or more
echo     characters.
echo.
echo     %NomCommande% /A My*file*.txt "/D:c:\My folder\Result file.txt"
goto fin

:error
echo The syntax of the command is incorrect.
echo.
goto help

:fin
rem pause

rem @33ddI7IHd
 
A+ :)

Re: Recherche de fichier à partir d'un nom et/ou d'une extension

Posté : 31 oct. 2014 15:22
par nehal
Hello !
Effectivement c'est un vieux sujet ^^
Merci à toi :)