Lister des fichiers dans un batch Windows

Classé dans : Serveurs | 5 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 ...

Le 06 septembre 2012 Antete a dit :

C'est tres elegant ! mais j'ai toujours un lorsqu'un fichier contient le caracter "&amp;".

j'appelle une sous fonction:
:Archive
set nom=%~1

mais il ajoute un espace avant le &amp; et me renvoit:
'mot apres &amp;' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes.

une idée ?
merci

Le 06 octobre 2017 Ashebiro a dit :

Ou sinon il y a toujours "dir" pour lister.

Affiche une liste de fichiers et de sous-r‚pertoires dans un r‚pertoire.

DIR [lecteur:][chemin][nom_de_fichier] [/A[[:]attributs]] [/B] [/C] [/D] [/L]
[/N] [/O[[:]tri]] [/P] [/Q] [/R] [/S] [/T[[:]heure]] [/W] [/X] [/4]

[lecteur:][chemin][nom_de_fichier]
Sp‚cifie le lecteur, le r‚pertoire et/ou fichiers … lister.

/A Affiche les fichiers dot‚s des attributs sp‚cifi‚s.
attributs D R‚pertoires R Lecture seule
H Cach‚ A Archive
S SystŠme I Fichiers index‚s sans contenu
L Points d'analyse - Pr‚fixe de n‚gation
/B Utilise le format abr‚g‚ (noms des fichiers).
/C Affiche le s‚parateur de milliers pour les tailles de fichiers.
Ceci est la valeur par d‚faut. Utilisez /-C pour d‚sactiver l'affichage
du s‚parateur.
/D Sur cinq colonnes avec fichiers tri‚s par colonne.
/L Affiche en minuscules.
/N Nouveau format longue liste o— les noms de fichiers sont … droite.
/O Affiche les fichiers selon un tri sp‚cifi‚.
tri N Nom (alphab‚tique) S Taille (ordre croissant)
E Extension (alphab‚tique) D Date et heure (chronologique)
G R‚pertoires en tˆte - Pr‚fixe en ordre indirect
/P Arrˆt aprŠs l'affichage d'un ‚cran d'informations.
/Q Affiche le propri‚taire du fichier.
/R Affiche les flux de donn‚es alternatifs du fichier.
/S Affiche les fichiers d'un r‚pertoire et de ses sous-r‚pertoires.
/T Contr“le le champ heure affich‚ ou utilis‚ dans le tri.
heure C Cr‚ation
A Dernier accŠs
W DerniŠre ‚criture
/W Affichage sur cinq colonnes.
/X Affiche les noms courts g‚n‚r‚s pour les noms de fichier non 8.3 car.
Ce format est celui de /N avec le nom court ins‚r‚ avant le nom long.
S'il n'y a pas de nom court, des espaces seront affich‚s … la place.
/4 Affiche l'ann‚e sur quatre chiffres.

Les commutateurs peuvent ˆtre pr‚configur‚s dans la variable d'environnement
DIRCMD. Pour les ignorer, les pr‚fixer avec un trait d'union. Par exemple /-W.

Fil RSS des commentaires de cet article