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.
batchfile "path" >filename.txt
aaa.css
und enthältzzz.cs
, wird die Erweiterung.cs
vom Skript nicht gemeldet.:
, damit sie den Grenzen entsprach.Ich habe ein einzeiliges Powershell-Skript verwendet, obwohl es die Anforderungen für ein Batch-Skript nicht strikt erfüllt:
Sie können es möglicherweise über die Befehlszeile / Batch-Datei ausführen:
Ich beanspruche keine Gutschrift dafür, und natürlich müssen Sie Powershell installiert haben. Für neuere Versionen von Windows gibt es keine Möglichkeit, dies zu umgehen.
Wenn Sie es entfernen
C:\MyDirectory
, wird es im aktuellen Verzeichnis ausgeführt.Am Ende wird eine FileExtensions.txt erstellt, die etwa Folgendes enthält:
Abhängig von Ihrer Ordnerstruktur können gelegentlich Fehler auftreten, die darauf hinweisen, dass Sie einen langen Pfad haben.
Alle darin enthaltenen Unterverzeichnisse werden ebenfalls nicht analysiert, die Ergebnisse für alle anderen werden jedoch weiterhin angezeigt.
quelle
Hier ist eine ausführliche Antwort mit PowerShell (unter Windows XP müssen Sie PowerShell installieren):
Hey, Scripting Guy! Wie kann ich mit Windows PowerShell die eindeutigen Dateierweiterungen auswählen, die in einer Dateisammlung verwendet werden?
quelle
So listen Sie alle eindeutigen Erweiterungen von cmd unter dem Pfad auf, den Sie gerade verwenden:
quelle
Ich fand es nützlich, mich zu ändern
zu
und zu ändern
zu
Die generierte Datei enthielt (keine Zeilenvorschübe, aber egal) .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
das konnte ich dann für mein projekt nutzen.
quelle