Dieses Batch-Skript erledigt das.
@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
Speichern Sie es als eine beliebige .bat
Datei und führen Sie es mit dem Befehl aus batchfile
(ersetzen Sie das, was Sie es genannt haben), um das aktuelle Verzeichnis aufzulisten, oder geben Sie einen Pfad mit an batchfile "path"
. Es werden alle Unterverzeichnisse durchsucht.
Wenn Sie in eine Datei exportieren möchten, verwenden Sie batchfile >filename.txt
(oder batchfile "path" >filename.txt
).
Erläuterung
Alles, bevor die for /f...
Zeile eingerichtet wird: Das Zielverzeichnis wird durchsucht, eine verzögerte Erweiterung aktiviertLF
, mit der ich Variablen in der Schleife aktualisieren und eine neue Zeile ( ) definieren kann, die für eine übersichtlichere Ausgabe verwendet werden kann. Oh, und die %~1
Mittel "Holen Sie sich das erste Argument, entfernen Sie Anführungszeichen", die doppelte Anführungszeichen verhindert - siehe for /?
.
Die Schleife verwendet diesen dir /b /s /a:-d "%target%"
Befehl und ruft eine Liste aller Dateien in allen Unterverzeichnissen unter dem Ziel ab.
%%~xi
extrahiert die Erweiterung aus den vollständigen Pfaden, die der dir
Befehl zurückgibt.
Eine leere Erweiterung wird durch "FileWithNoExtension" ersetzt, sodass Sie wissen, dass es eine solche Datei gibt. Wenn ich stattdessen eine leere Zeile hinzufüge, ist dies nicht ganz so offensichtlich.
Die gesamte aktuelle Liste wird über einen find
Befehl gesendet , um die Eindeutigkeit sicherzustellen. Die Textausgabe des Befehls find wird an nul
ein Schwarzes Loch gesendet - wir wollen es nicht. Da wir immer ein :
am Ende der Liste anhängen , sollten wir auch sicherstellen, dass die Suchanfrage mit einem endet, :
damit sie nicht mit Teilergebnissen übereinstimmt - siehe Kommentare.
% ERRORLEVEL% wird vom find
Befehl festgelegt. Der Wert 0 gibt an, dass eine Übereinstimmung vorliegt . Wenn es also nicht 0 ist, ist die aktuelle Erweiterung noch nicht in der Liste und sollte hinzugefügt werden.
Die Echo-Zeile wird im Grunde genommen ausgegeben, und ich ersetze meine Platzhalter ( :
) durch Zeilenumbrüche, damit sie gut aussehen.