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.
batchfile "path" >filename.txt
aaa.css
etzzz.cs
, l'extension.cs
ne sera pas signalée par le script.:
pour la forcer à correspondre aux limites.Bien que ne répondant pas strictement à l'exigence d'un script batch, j'ai utilisé un script powershell sur une seule ligne:
Vous pouvez potentiellement l'exécuter à partir de la ligne de commande / fichier batch:
Je ne demande aucun crédit pour cela, et bien sûr, vous aurez besoin d'installer Powershell. Pour les nouvelles versions de Windows, il n'y a aucun moyen de contourner cela.
Si vous le supprimez,
C:\MyDirectory
il s'exécutera dans le répertoire courant.À la fin, il produira un FileExtensions.txt contenant quelque chose comme ceci:
En fonction de la structure de votre dossier, vous pouvez parfois obtenir des erreurs vous informant que votre chemin est long.
Tous les sous-répertoires ne seront pas analysés mais les résultats pour tout le reste seront toujours affichés.
la source
Voici une réponse détaillée à l'aide de PowerShell (avec Windows XP, vous devrez installer PowerShell):
Hé, le scripteur! Comment puis-je utiliser Windows PowerShell pour sélectionner les extensions de fichier uniques utilisées dans une collection de fichiers?
la source
Pour répertorier toutes les extensions uniques de cmd sous le chemin que vous utilisez:
la source
J'ai trouvé utile de changer
à
et changer
à
Le fichier généré contenait (pas de sauts de ligne, mais peu importe) .bat.pdf.skp.ai.png.jpg.tif.pcp.txt.lst.ttf.dfont.psd.indd.docx.PDF.JPG.gif.jpeg .dwg.exr.FileWithNoExtension.vrlmap.sat.bak.ctb
que j'ai ensuite pu utiliser pour mon projet.
la source