Lister des fichiers dans un batch Windows

Classé dans : Serveurs | 3 commentaires

mercredi 17 février 2010

Petite explication sur la façon de lister les fichiers d'un dossier dans un fichier bat sous Windows :

Pour lister les fichiers d'un dossier donné, il suffit d'utiliser la commande FOR de la façon suivante :

for %%f in (<un chemin>\*.<ext>) do <une commande>

On récupère le chemin complet (dossier + nom du fichier) du fichier dans la variable %%f.
Cette variable est obligatoirement composée d'une seule lettre.

Le plus simple pour effectuer des traitements sur les fichiers est d'utiliser une fonction pour laquelle on passe le nom du fichier :

Voici un exemple :

for %%f in (C:\temp\*.css) do call :process %%f
goto :eof

:process
SET fichier=%1
echo Fichier : %fichier%

N'oubliez pas le goto :eof à la fin du script sinon il continuera en passant sur les fonctions définies en dessous (qui retournerons au mieux des erreurs pour fichiers introuvables, au pire des résultats inattendus)

Le script affichera des résultats du type

Fichier : C:\temp\styles.css

Si l'on souhaite ne récupérer que le nom du fichier sans le chemin, il suffit d'appeler la ligne suivante :

for %%f in (C:\temp\*.css) do call :process %%~nxf

On utilise les caractères de substitution en faisant précéder la variable par un tilde (~) et l'info à récupérer parmi, entre autre (cf liste complète dans l'aide de FOR (FOR /?)) :

  • d : lettre de lecteur
  • p : chemin d'accès (hors lettre de lecteur)
  • n : nom de fichier (sans l'extension)
  • x : extension de fichier (avec le "." initial)
  • s : chemin complet avec des noms courts
  • a : attributs du fichier
  • t  : date du fichier
  • z : taille du fichier (en octets)

En bref, %%f = %%~dpnxf

Et pour lister les dossiers ?

Rien de plus simple :

for /f %%i In ('dir /b /ad "C:\Windows"') Do ...

Commentaires

Le 31 mai 2010 Olivier a dit :

bonjour,

peut-on inclure dans la recherche les sous repertoires ?
car dans cet exemple on ne fait la recherche QUE dans le repertoire courant.

merci d'avance.
Olivier

Le 17 juin 2010 fred a dit :

@Olivier :
Là j'avoue que je ne sais pas, je sèche. ;-)

Le 18 avril 2012 Bartrik a dit :

On peut :

for /f %%i In ('dir /b /S /ad "C:\Windows"') Do ...

Fil Rss des commentaires de cet article

Ecrire un commentaire




Quelle est la dernière lettre du mot lcdp ? :