fugu
Goto Top

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

Content-Key: 27698

Url: https://administrator.de/contentid/27698

Printed on: April 16, 2024 at 17:04 o'clock

Member: Dani
Dani Mar 08, 2006 at 13:44:39 (UTC)
Goto Top
Hi,
ich hab das so hinbekommen, dass nur die im angegebenen Pfad in der txt - Datei landen.
Einfach " /s /b " weglassen.

Gruß
Dani
Mitglied: 13100
13100 Mar 08, 2006 at 13:47:02 (UTC)
Goto Top
/s hebt /b auf, soweit ich weiss, also ohne /s müsste es gehen.
Member: fugu
fugu Mar 08, 2006 at 13:54:37 (UTC)
Goto Top
Jo prima, this worx!
Nur ist das jetzt ohne Unterverzeichnisse.
D. h. ich kann keine doppelte Einträge finden und ich müsste alle Unterverzeichnisse extra eingeben.

Vielleicht noch andere Ideen?

Fugu
Member: Dani
Dani Mar 08, 2006 at 16:07:37 (UTC)
Goto Top
Hi,
probier das mal:

For /F "delims=" %%i in ('dir *.*') do echo %%i >>C:\text.txt


Gruß
Dani
Member: djbrandt
djbrandt Mar 09, 2006 at 14:30:30 (UTC)
Goto Top
Hallo,

versuch mal mit:


for /f "usebackq" %i in (`dir /s /b`) do @echo %~ni.%~xi

sorry, kleiner bug face-smile

also in Deinem Fall

for /f "usebackq tokens=*" %i in (`dir D:\eBooks /s /b`) do @echo %~ni%~xi >> eBooks.txt

Gruß

Dieter
Member: Biber
Biber Mar 15, 2006 at 21:10:31 (UTC)
Goto Top
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:
for /f "delims=][ tokens=1,3" %i in (%lst%) do @echo %i
db2java.zip
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
Member: fugu
fugu Mar 16, 2006 at 13:15:57 (UTC)
Goto Top
*schluck*

Moin Moin!
Also Biber, DAS muss ich mir in Ruhe antun ... heute Abend/Nacht!

Gaaanz viel Dankeschön erstmal. Ich poste später, ob ich damit klar gekommen bin face-wink

Greetz Fugu
Member: Biber
Biber Mar 16, 2006 at 13:32:05 (UTC)
Goto Top
Moin fugu,

lass Dich nicht von der vielen Prosa abschrecken.

Tipp zur Probe einfach mal am CMD-Prompt ein:
(for /f "delims=" %i in ('dir d:\eBooks\*.* /s /b') do @echo [%~nxi] [%~dpi])|sort

...dann siehst Du ja, ob es in die richtige Richtung geht.
Der Rest ist ja nur Blendwerk *gg

Gruß Biber
Member: fugu
fugu Mar 22, 2006 at 12:10:16 (UTC)
Goto Top
Moin Biber,

hat etwas gedauert, aber immerhin...
Hab mir das jetzt alles angeschaut und kann damit alles lösen, was ich möchte.

[Zitat]
"ein Batch lohnt sich eigentlich gar nicht... "
[Zitat Ende]

Für dich vielleicht nicht face-wink aber wer so wie ich die doch recht kryptischen DOS-Befehle nicht so drauf hat, ist es ganz angenehm für sowas 'ne "Gedächtnis-Stützen-Batch" zu haben.

Gruss und Danke (volle Punktzahl)

Fugu