Ce script batch le fera.
@echo off
set target=%~1
if "%target%"=="" set target=%cd%
setlocal EnableDelayedExpansion
set LF=^
rem Previous two lines deliberately left blank for LF to work.
for /f "tokens=*" %%i in ('dir /b /s /a:-d "%target%"') do (
set ext=%%~xi
if "!ext!"=="" set ext=FileWithNoExtension
echo !extlist! | find "!ext!:" > nul
if not !ERRORLEVEL! == 0 set extlist=!extlist!!ext!:
)
echo %extlist::=!LF!%
endlocal
Enregistrez-le sous n'importe quel .bat
fichier et exécutez-le avec la commande batchfile
(remplacez ce que vous avez nommé) pour répertorier le répertoire en cours ou spécifiez un chemin avec batchfile "path"
. Il recherchera tous les sous-répertoires.
Si vous souhaitez exporter vers un fichier, utilisez batchfile >filename.txt
(ou batchfile "path" >filename.txt
).
Explication
Tout ce qui précède la for /f...
ligne ne fait que mettre les choses en place: il obtient le répertoire cible à rechercher, active l' expansion retardée qui me permet de mettre à jour les variables dans la boucle et définit une nouvelle ligne ( LF
) que je peux utiliser pour une sortie plus nette. Oh, et le %~1
moyen "obtenir le premier argument, supprimer les guillemets" qui empêche les guillemets doublés - voir for /?
.
La boucle utilise cette dir /b /s /a:-d "%target%"
commande, récupérant une liste de tous les fichiers dans tous les sous-répertoires sous la cible.
%%~xi
extrait l'extension des chemins complets renvoyés par la dir
commande.
Une extension vide est remplacée par "FileWithNoExtension", donc vous savez qu'il existe un tel fichier - si j'ai ajouté une ligne vide à la place, ce n'est pas aussi évident.
Toute la liste actuelle si elle est envoyée via une find
commande, pour garantir l'unicité. La sortie texte de la commande find est envoyée à nul
, essentiellement un trou noir - nous n'en voulons pas. Comme nous ajoutons toujours un :
à la fin de la liste, nous devons également nous assurer que la requête de recherche se termine par un :
afin qu'elle ne corresponde pas aux résultats partiels - voir les commentaires.
% ERRORLEVEL% est défini par la find
commande, une valeur de 0 indique une correspondance. Donc, si ce n'est pas 0, l'extension actuelle n'est pas sur la liste jusqu'à présent et devrait être ajoutée.
La ligne d'écho sort essentiellement, et je remplace également mes espaces réservés ( :
) par des sauts de ligne pour les rendre agréables.