DirList Ausgabe in Textdatei formatieren
ohne Pfadangaben
Moinz an alle Batch-Profis!
Also bis hier hin ist das ja noch leicht:
---
dir D:\eBooks /s /b >> eBooks.txt
---
Kann man dem Ganzen jetzt noch "verbieten" immer die Pfadangabe mit auszugeben? Ich möchte nur die Dateinamen in der Textdatei haben.
Thx, Fugu
Moinz an alle Batch-Profis!
Also bis hier hin ist das ja noch leicht:
---
dir D:\eBooks /s /b >> eBooks.txt
---
Kann man dem Ganzen jetzt noch "verbieten" immer die Pfadangabe mit auszugeben? Ich möchte nur die Dateinamen in der Textdatei haben.
Thx, Fugu
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 27698
Url: https://administrator.de/forum/dirlist-ausgabe-in-textdatei-formatieren-27698.html
Ausgedruckt am: 02.04.2025 um 23:04 Uhr
9 Kommentare
Neuester Kommentar

/s hebt /b auf, soweit ich weiss, also ohne /s müsste es gehen.
Moin fugu,
ich versuch auch mal herzuleiten, wie ich es angehen würde..
In meinem Beispiel suche ich mal nicht nach allen Dateien auf d:\ebooks, sondern nach allen Dateien D:\temp\d*.zip
Ich mache es mal in Zwischenschritten am CMD-Prompt.
Step 1 Settings... a) Mein DIR-Befehl und b) meine ListDatei
$cmd$ set "mydircmd=dir d:\temp\d*.zip /s /b"
$cmd$ Set "lst=con"
Step 2
$cmd$ for /f "delims=" %i in ('%myDircmd%') do @echo [%~nxi] [%~dpi]
[DPNachnahme.zip] [d:\temp\]
[disco4i.jar-796e158a-7924f48a.zip] [d:\temp\Backup1\tsprofil\Oracle Jar Cache\]
[db2java.zip] [d:\temp\unterverzeichnis_neu\DB2GW004\TEST_P\]
[db2java.zip] [d:\temp\unterverzeichnis_neu\DB2GW005\TEST_ME\]
[db2java.zip] [d:\temp\unterverzeichnis_neu\Dbvisu\]
[db2java.zip] [d:\temp\unterverzeichnis_neu\Sql-Workbench\]
[db2javaV72FP7.zip] [d:\temp\unterverzeichnis_neu\Sql-Workbench\]
Step 3
Den Outputkrams gleich mal alphabetisch in die Ausgabedatei sortieren lassen:
$cmd$(for /f "delims=" %i in ('%myDircmd%') do @echo [%~nxi] [%~dpi])|sort >%lst%
[db2java.zip] [d:\temp\unterverzeichnis_neu\DB2GW004\TEST_P\]
[db2java.zip] [d:\temp\unterverzeichnis_neu\DB2GW005\TEST_ME\]
[db2java.zip] [d:\temp\unterverzeichnis_neu\Dbvisu\]
[db2java.zip] [d:\temp\unterverzeichnis_neu\Sql-Workbench\]
[db2javaV72FP7.zip] [d:\temp\unterverzeichnis_neu\Sql-Workbench\]
[disco4i.jar-796e158a-7924f48a.zip] [d:\temp\Backup1\tsprofil\Oracle Jar Cache\]
[DPNachnahme.zip] [d:\temp\]
So habe ich (wenn ich dieses Ergebnis in eine echte Datei wegschreiben lasse, alles nach Dateinamen sortiert und die Verzeichnisnamen hintendran.
Step 4 Listfile ändern und letzten Befehl nochmal abschicken
$cmd$ Set "lst=alldzips.txt"
$cmd$ (for /f "delims=" %i in ('%myDircmd%') do @echo [%~nxi] [%~dpi])|sort >%lst%
So, nun wäre die halbe Aufgabe gelöst...
Willst Du nur eine Liste nur mit Dateinamen:
db2java.zip
db2java.zip
db2java.zip
db2javaV72FP7.zip
disco4i.jar-796e158a-7924f48a.zip
DPNachnahme.zip
Wenn Du jetzt noch schnell alle "doppelten" Dateinamen sehen willst, reicht folgende eine Zeile am CMD-Prompt
$cmd$for /f "delims=][ tokens=1,3" %i in (%lst%) do @find /n "%i" %lst%|@find /v "%j"|find /v /i "%lst%"
[2][db2java.zip] [d:\temp\unterverzeichnis_neu\DB2GW005\TEST_ME\]
[3][db2java.zip] [d:\temp\unterverzeichnis_neu\Dbvisu\]
[4][db2java.zip] [d:\temp\unterverzeichnis_neu\Sql-Workbench\]
[1][db2java.zip] [d:\temp\unterverzeichnis_neu\DB2GW004\TEST_P\]
[3][db2java.zip] [d:\temp\unterverzeichnis_neu\Dbvisu\]
[4][db2java.zip] [d:\temp\unterverzeichnis_neu\Sql-Workbench\]
[1][db2java.zip] [d:\temp\unterverzeichnis_neu\DB2GW004\TEST_P\]
[2][db2java.zip] [d:\temp\unterverzeichnis_neu\DB2GW005\TEST_ME\]
[4][db2java.zip] [d:\temp\unterverzeichnis_neu\Sql-Workbench\]
[1][db2java.zip] [d:\temp\unterverzeichnis_neu\DB2GW004\TEST_P\]
[2][db2java.zip] [d:\temp\unterverzeichnis_neu\DB2GW005\TEST_ME\]
[3][db2java.zip] [d:\temp\unterverzeichnis_neu\Dbvisu\]
Ich erläutere mal diese Zeile:
for /f "delims=][ tokens=1,3" %i in (%lst%) do (....
Für alle Zeilen in der %lst%-Datei, also in meiner alldzips.txt...
...lese alle Zeilen...
...die Tokens sollen getrennt sein mit eckigen Klammern "[" und "]"...
...Ich will nur das erste und das dritte Token ..(Token2 ist ein Leerzeichen)
@find /n "%i" %lst%|@find /v "%j"|find /v /i "%lst%"
Erstes Find: Gib die Zeilennummer aus ("/n") für jede Fundstelle von Token1==Dateiname"
Zweites Find: lösch die Zeile aus dem Ergebnis, die exakt den gleichen Pfadnamen enthält
drittes Find: lösch alle Zeilen, die nur den Dateinamen Alldzips.txt enthalten.
Also..summa summarum - ein Batch lohnt sich eigentlich gar nicht... mit zwei runtergetippten Zeilen am Prompt ließe sich das alles lösen..
Als Batch:
Einfach die Zeilen oben übernehmen,
bei den Zählvariablen alle einfachen Prozentzeichen durch doppelte ersetzen,
und die Steuerzeichen maskieren..
Und für mydircmd einsetzen: dir c:\Ebooks\*.*
::------ snipp EbookSearch.bat
@echo off & setlocal
set "mydircmd=dir D:\ebooks\*.* /s /b"
Set "lst=alldzips.lst"
(for /f "delims=" %%i in ('%myDircmd%') do @echo [%%~nxi] [%%~dpi]) |sort>%lst%
for /f "delims=][ tokens=1,3" %%i in (%lst%) do @find /n "%%i" %lst%|@find /v "%%j"|find /v /i "%lst%"
::------snapp EbookSearch.bat
Thats all...
HTH Biber
ich versuch auch mal herzuleiten, wie ich es angehen würde..
In meinem Beispiel suche ich mal nicht nach allen Dateien auf d:\ebooks, sondern nach allen Dateien D:\temp\d*.zip
Ich mache es mal in Zwischenschritten am CMD-Prompt.
Step 1 Settings... a) Mein DIR-Befehl und b) meine ListDatei
$cmd$ set "mydircmd=dir d:\temp\d*.zip /s /b"
$cmd$ Set "lst=con"
Step 2
$cmd$ for /f "delims=" %i in ('%myDircmd%') do @echo [%~nxi] [%~dpi]
[DPNachnahme.zip] [d:\temp\]
[disco4i.jar-796e158a-7924f48a.zip] [d:\temp\Backup1\tsprofil\Oracle Jar Cache\]
[db2java.zip] [d:\temp\unterverzeichnis_neu\DB2GW004\TEST_P\]
[db2java.zip] [d:\temp\unterverzeichnis_neu\DB2GW005\TEST_ME\]
[db2java.zip] [d:\temp\unterverzeichnis_neu\Dbvisu\]
[db2java.zip] [d:\temp\unterverzeichnis_neu\Sql-Workbench\]
[db2javaV72FP7.zip] [d:\temp\unterverzeichnis_neu\Sql-Workbench\]
Step 3
Den Outputkrams gleich mal alphabetisch in die Ausgabedatei sortieren lassen:
$cmd$(for /f "delims=" %i in ('%myDircmd%') do @echo [%~nxi] [%~dpi])|sort >%lst%
[db2java.zip] [d:\temp\unterverzeichnis_neu\DB2GW004\TEST_P\]
[db2java.zip] [d:\temp\unterverzeichnis_neu\DB2GW005\TEST_ME\]
[db2java.zip] [d:\temp\unterverzeichnis_neu\Dbvisu\]
[db2java.zip] [d:\temp\unterverzeichnis_neu\Sql-Workbench\]
[db2javaV72FP7.zip] [d:\temp\unterverzeichnis_neu\Sql-Workbench\]
[disco4i.jar-796e158a-7924f48a.zip] [d:\temp\Backup1\tsprofil\Oracle Jar Cache\]
[DPNachnahme.zip] [d:\temp\]
So habe ich (wenn ich dieses Ergebnis in eine echte Datei wegschreiben lasse, alles nach Dateinamen sortiert und die Verzeichnisnamen hintendran.
Step 4 Listfile ändern und letzten Befehl nochmal abschicken
$cmd$ Set "lst=alldzips.txt"
$cmd$ (for /f "delims=" %i in ('%myDircmd%') do @echo [%~nxi] [%~dpi])|sort >%lst%
So, nun wäre die halbe Aufgabe gelöst...
Willst Du nur eine Liste nur mit Dateinamen:
for /f "delims=][ tokens=1,3" %i in (%lst%) do @echo %i
db2java.zipdb2java.zip
db2java.zip
db2java.zip
db2javaV72FP7.zip
disco4i.jar-796e158a-7924f48a.zip
DPNachnahme.zip
Wenn Du jetzt noch schnell alle "doppelten" Dateinamen sehen willst, reicht folgende eine Zeile am CMD-Prompt
$cmd$for /f "delims=][ tokens=1,3" %i in (%lst%) do @find /n "%i" %lst%|@find /v "%j"|find /v /i "%lst%"
[2][db2java.zip] [d:\temp\unterverzeichnis_neu\DB2GW005\TEST_ME\]
[3][db2java.zip] [d:\temp\unterverzeichnis_neu\Dbvisu\]
[4][db2java.zip] [d:\temp\unterverzeichnis_neu\Sql-Workbench\]
[1][db2java.zip] [d:\temp\unterverzeichnis_neu\DB2GW004\TEST_P\]
[3][db2java.zip] [d:\temp\unterverzeichnis_neu\Dbvisu\]
[4][db2java.zip] [d:\temp\unterverzeichnis_neu\Sql-Workbench\]
[1][db2java.zip] [d:\temp\unterverzeichnis_neu\DB2GW004\TEST_P\]
[2][db2java.zip] [d:\temp\unterverzeichnis_neu\DB2GW005\TEST_ME\]
[4][db2java.zip] [d:\temp\unterverzeichnis_neu\Sql-Workbench\]
[1][db2java.zip] [d:\temp\unterverzeichnis_neu\DB2GW004\TEST_P\]
[2][db2java.zip] [d:\temp\unterverzeichnis_neu\DB2GW005\TEST_ME\]
[3][db2java.zip] [d:\temp\unterverzeichnis_neu\Dbvisu\]
Ich erläutere mal diese Zeile:
for /f "delims=][ tokens=1,3" %i in (%lst%) do (....
Für alle Zeilen in der %lst%-Datei, also in meiner alldzips.txt...
...lese alle Zeilen...
...die Tokens sollen getrennt sein mit eckigen Klammern "[" und "]"...
...Ich will nur das erste und das dritte Token ..(Token2 ist ein Leerzeichen)
@find /n "%i" %lst%|@find /v "%j"|find /v /i "%lst%"
Erstes Find: Gib die Zeilennummer aus ("/n") für jede Fundstelle von Token1==Dateiname"
Zweites Find: lösch die Zeile aus dem Ergebnis, die exakt den gleichen Pfadnamen enthält
drittes Find: lösch alle Zeilen, die nur den Dateinamen Alldzips.txt enthalten.
Also..summa summarum - ein Batch lohnt sich eigentlich gar nicht... mit zwei runtergetippten Zeilen am Prompt ließe sich das alles lösen..
Als Batch:
Einfach die Zeilen oben übernehmen,
bei den Zählvariablen alle einfachen Prozentzeichen durch doppelte ersetzen,
und die Steuerzeichen maskieren..
Und für mydircmd einsetzen: dir c:\Ebooks\*.*
::------ snipp EbookSearch.bat
@echo off & setlocal
set "mydircmd=dir D:\ebooks\*.* /s /b"
Set "lst=alldzips.lst"
(for /f "delims=" %%i in ('%myDircmd%') do @echo [%%~nxi] [%%~dpi]) |sort>%lst%
for /f "delims=][ tokens=1,3" %%i in (%lst%) do @find /n "%%i" %lst%|@find /v "%%j"|find /v /i "%lst%"
::------snapp EbookSearch.bat
Thats all...
HTH Biber