teklan
Goto Top

Datei auslesen und bestimmte Wörter in neue Datei schreiben mit Batch

Hallo,

ich habe hier eine große Datei mit vielen Kryptischen Zeichen, aber auch normalen Buchstaben:
(Beispiel-datei-Ausschnitt) "einlesedatei.txt"

...
"name" "-424 25744 582"
"wert" "4 3 24"
"pfad" "daten/name1.rst"
"klname" "sarg_wert12g"
"pfad" "logs/name2.pop"
...

...so, ich möchte nun daraus eine neue Datei, die folgendes Beinhaltet:

/daten/datei1.rst
/logs/datei2.pop

und so weiter, je nachdem wieviele datei-angaben mit .rst oder .pop in der Datei stehen. Wie kann ich das am einfachsten realisieren? Habe leider kaum Ahnung von Batch...bisher hatte ich das etwa gebaut:

@echo off
set PF=einlesedatei.txt
findstr /C:".rst" %PF% > rst.txt
findstr /C:".pop" %PF% > pop.txt
copy rst.txt+pop.txt alle.txt

dadurch habe ich dann eine datei, mit alles Zeilen wo ".rst" und ".pop" vorkommt:
z.B.:

"pfad" "daten/name1.rst"
"pfad" "daten/name1.rst"
"pfad" "daten/name1.rst"
"pfad" "logs/name2.pop"
"pfad" "logs/name2.pop"

Das wäre schritt 1 ^^ ...aber wie kann ich jetzt erreichen das ich eine Datei daraus bekomme die nur:

"pfad" "daten/datei1.rst"
"pfad" "logs/datei2.pop"

beinhaltet(also doppelte Einträge raus)...und dann jeweils -"pfad" "- und -"- (am ende) lösch,t und ein "/" vorne dranhängt?

Kann mir da jemand weiterhelfen helfen? face-smile

lg

Content-Key: 70858

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

Printed on: April 18, 2024 at 12:04 o'clock

Member: bastla
bastla Oct 13, 2007 at 12:41:58 (UTC)
Goto Top
Hallo teklan und willkommen im Forum!

Falls Du nicht tatsächlich vorhast (wie in Deinem Beispiel) aus "name1.rst" ein "datei1.rst" zu machen, könnte das so klappen:
@echo off & setlocal
set "Ein=D:\Ein.txt"  
set "Aus=D:\Aus.txt"  

if exist "%Aus%" del "%Aus%"  
set Zuletzt=-
for /f "tokens=2" %%i in ('findstr ".rst .pop" "%Ein%"^|sort') do call :ProcessLink "%%~i"  
goto :eof

:ProcessLink
if %1==%Zuletzt% goto :eof
set Zuletzt="%~1"  
(echo /%~1)>>"%Aus%"  
"D:\Ein.txt" wäre dabei Deine "große Datei".

Grüße
bastla
Member: teklan
teklan Oct 13, 2007 at 14:19:38 (UTC)
Goto Top
Super! Das ist genau das was ich suchte!!!

Vielen Dank! ....nur eine Frage hätte ich noch...er findet zwar
jetzt alle "name1.rst" und "name2.pop"
...aber er findet auch "irgendwas_rst" ...das liegt wohl an der angabe "findstrr ".rst .pop""
..hab schon versucht das selber hinzubekommen duch ändern der
Syntax von findstr ..aber kamen nur Fehlermeldungen ;) ...kennst du die
richtige Syntax...oder muss man die "irgendwas_rst" erst danach rausfilter/löschen?

Edit: Und noch eine kleine Sache: Bei Ausführung wird "FINDSTR: Fehler beim Schreiben" angezeigt, und in der letzten Zeile der Ausgabedatei erscheint nur das "/" ;)


Vielen Dank aber schonmal!!
Member: bastla
bastla Oct 13, 2007 at 15:09:39 (UTC)
Goto Top
Hallo teklan!

Ändere die "findstr"-Schreibweise auf
findstr "\.rst \.pop" "%Ein%"  

Bei Ausführung wird "FINDSTR: Fehler beim Schreiben" angezeigt, und in der letzten Zeile der Ausgabedatei erscheint nur das "/" ;)
Mit den aus Deinem ersten Posting entnommenen Testdaten erhalte ich keine derartige Fehlermeldung.

Du könntest das "@echo off" auf "@echo on" ändern und den Batch so aufrufen:
Batchname > D:\Log.txt
In der damit erstellten "D:\Log.txt" könntest Du dann versuchen, dem Fehler auf die Spur zu kommen. Wenn Du
Batchname > D:\Log.txt 2>&1
schreibst, werden auch die Fehlermeldungen in der Log-Datei protokolliert.

Grüße
bastla
Member: bastla
bastla Oct 13, 2007 at 15:21:00 (UTC)
Goto Top
... Nachtrag: Damit das Filtern mehrfach vorhandener Einträge sicherer wird, sollte eine temporäre Liste erstellt werden. Dann ergibt sich folgender Batch:
@echo off & setlocal
set "Ein=D:\Ein.txt"  
set "Aus=D:\Aus.txt"  

set "T=%Temp%\Unsortiert.txt"  
if exist "%T%" del "%T%"  
for /f "tokens=2" %%i in ('findstr "\.rst \.pop" "%Ein%"') do (echo %%~i)>>"%T%"  

set Zuletzt=-
if exist "%Aus%" del "%Aus%"  
for /f "delims=" %%i in ('sort "%T%"') do call :ProcessLink "%%~i"  
del "%T%"  
goto :eof

:ProcessLink
if %1==%Zuletzt% goto :eof
set Zuletzt="%~1"  
(echo /%~1)>>"%Aus%"  

Grüße
bastla

[Edit] Korrektur: In der letzten Zeile muss die Ausgabe nach "%Aus%" erfolgen. Außerdem ist "%Aus%" vorweg zu löschen. [/Edit]
Member: bastla
bastla Oct 13, 2007 at 15:29:11 (UTC)
Goto Top
... Nachtrag zum Nachtrag: Ich habe noch notwendige Korrekturen vorgenommen.

Grüße
bastla
Member: teklan
teklan Oct 13, 2007, updated at Oct 18, 2012 at 16:32:34 (UTC)
Goto Top
hey danke,

das findstr "\.str \.pop" klappt super, und das hat auch den Fehler behoben...die batch ist bestimmt
irgendwie durcheinandergekommen, da in der ausgangsdatei auch viele kryptsiche Zeichen waren.
Nunja auf jeden Fall klappt jetzt alles prima! Vielen Dank nochmal!

...jetzt möchte ich diese batch nurnoch ein bisschen erweitern...aber das schreibe ich ihn neuem Tread, da es anderes "Thema" ist, und für andere Leute dadurch denk ich leichter gefunden wird!

Link zu dem neuen Thema: Eine Datei in meine Batch-Datei ziehen und verarbeiten

Gruss