oli-nux
Goto Top

Inhalt aus TXT-Dateien zusammenfassen

Joinen von txt's zu einer txt

Hallo,

ich habe hier über 700 .txt-Dateien.
Ich möchte den Inhalt bestimmter TXT-Dateien zusammenfassen um somit zum Schluß weniger Dateien zu haben als jetzt. face-wink

Hoffe mir kann jemand dafür eine Batch schreiben?
Falls das Unter Dos auch so möglich sein sollte bitte ich um die genauen Befehle.

Das Ganze sollte dann so aussehen, dass ich über die CMD (Eingabeaufforderung) folgenden Befehl verwenden kann:
[batchname.bat] [inputfile/s] [outputfile]
Beispiel:
[txt.join.batch.bat] [txt1.txt 123.txt irgendwas.txt] [gejointe.txt]

Es soll auch so sein, dass der Inhalt der einzelnen Txt's im Nachhinein auch Zeile für Zeile in der neuen Txt steht und nicht in einer einzigen Zeile.
Also quasi den Inhalt so übernehmen wie er in den txt's schon ist!

Beispiel:
Adam
Thomas
Max

und nicht:
Adam Thomas Max ....

Das Ganze wäre dringend! face-smile

Content-Key: 63223

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

Printed on: April 25, 2024 at 06:04 o'clock

Member: geTuemII
geTuemII Jul 06, 2007 at 15:28:03 (UTC)
Goto Top
Dann poste uns doch mal den Code, den du bis jetzt erstellt hast und teile uns am besten genau mit, an welcher Stelle du Fehlermeldungen oder sonstige Probleme hast.

geTuemII
Member: Oli-nux
Oli-nux Jul 06, 2007 at 16:21:01 (UTC)
Goto Top
Dann poste uns doch mal den Code, den du bis
jetzt erstellt hast und teile uns am besten
genau mit, an welcher Stelle du
Fehlermeldungen oder sonstige Probleme hast.

geTuemII
Ich hab selber garnichts geschrieben weil ich es nicht kann, deshalb suche ich ja jemanden der mir sowas erstellt. face-wink
Mitglied: 13100
13100 Jul 06, 2007 at 17:02:56 (UTC)
Goto Top
lies dir den text von copy /? durch.
Member: bastla
bastla Jul 06, 2007 at 17:47:45 (UTC)
Goto Top
Hallo Oli-nux!

Vielleicht so:
@echo off
if exist %1 del %1
:Loop
if "%~2" neq "" type %2>>%1 & shift /2 & goto :Loop  
Aufzurufen ist der Batch mit
batchname.bat outputfile inputfile/s
wobei als inputfile/s auch Wildcards zulässig sind (etwa *.txt). Empfehlenswert wäre es in diesem Fall, das outputfile in einem anderen Verzeichnis zu erstellen, damit es nicht irrtümlich als inputfile interpretiert wird (wäre bei "gejointe.txt" der Fall).
Zu
und nicht:
Adam Thomas Max ....
hängt von den Ausgangsdateien ab - wenn diese nicht mit einer Zeilenschaltung enden, wird auch die gejointe Datei keine enthalten.

Grüße
bastla
Member: Oli-nux
Oli-nux Jul 06, 2007 at 18:29:47 (UTC)
Goto Top
Danke bastla, probiere ich auch am Wochenende mal aus. face-smile

lies dir den text von copy /? durch.
Danke, das half schon weiter. face-smile
Zwar etwas umständlicher als evtl. eine Batch aber ok. face-wink
Member: Oli-nux
Oli-nux Jul 06, 2007 at 19:02:16 (UTC)
Goto Top
Wenns jetzt noch ein Tool geben würde in das ich die Txt-Dateien welche ich joinen möchte hineinziehen könnte und mir dann auf Knopfdruck eine TXT erstellt werden würde, wäre es noch toller. face-wink

Das per "copy" dauert jetzt nämlich auch länger (bei über 700 Dateien). face-sad
Mitglied: 13100
13100 Jul 06, 2007 at 19:17:01 (UTC)
Goto Top
einfach mal na so nen tools suchen.
kleiner tip: tools die splitten können, können meistens auch files zusammenführen.
jetz du halt auch mal was.

kann mir eigentlich nich vorstellen, dass der copy befehl probleme mit 700 files hat.
is glaub ich eher ne frage wie man sich anstellt.

ein ähnliches ergebniss bekommt man übrigens mit
type s1.txt >> result.txt
type s2.txt >> result.txt
type s3.txt >> result.txt
Member: bastla
bastla Jul 06, 2007 at 20:25:06 (UTC)
Goto Top
Hallo Oli-nux!

Wie wäre es mit dem Kopieren/Verschieben aller (700) Dateien in einen temporären Ordner (etwa "D:\Sammel") und anschließendem
copy "D:\Sammel\*.*" "D:\joined.txt"  

Grüße
bastla
Member: Oli-nux
Oli-nux Jul 07, 2007 at 07:22:12 (UTC)
Goto Top
Hallo Oli-nux!

Wie wäre es mit dem
Kopieren/Verschieben aller (700) Dateien in
einen temporären Ordner (etwa
"D:\Sammel") und
anschließendem
copy "D:\Sammel\*.*"  
> "D:\joined.txt"  
> 

Grüße
bastla
Das wäre nicht gut, denn ich will ja nicht alle 700 Dateien in einer haben sondern nur bestimmte zusammengefasst! face-wink
Habe ich oben aber auch geschrieben.
Member: bastla
bastla Jul 07, 2007 at 07:31:45 (UTC)
Goto Top
Hallo Oli-nux!

Ich war davon ausgegangen, dass die 700 eine Teilmenge wären, und alle zusammengefasst werden sollen, was aber nichts am Prinzip ändert:
Zusammenzufassende Dateien in einem Ordner sammeln und alle Dateien dieses Ordners mit dem beschriebenen "copy"-Befehl kombinieren.
Übrigens: Wieviele Dateien sollen maximal zusammengefasst werden? Wenn's eine kleinere Anzahl (bis etwa 50, je nach Pfadlänge) sein sollte, geht's auch mit Drag & Drop, wobei jedoch die Zieldatei bereits im Batch vorgegeben sein muss, also etwa:
@echo off & setlocal
set "Zusammen=D:\Zusammen.txt"  
if exist "%Zusammen%" del "%Zusammen%"  
:Loop
if "%~1" neq "" type %1>>"%Zusammen%" & shift & goto :Loop  
pause
Vorgangsweise dann: Dateien markieren, auf die Batchdatei ziehen, nach Bearbeitung aller Dateien (und Tastendruck) fertige Zusammenfassungsdatei ("D:\Zusammen.txt") umbenennen, damit sie beim nächsten Mal nicht überschrieben wird.

Grüße
bastla
Member: Oli-nux
Oli-nux Jul 08, 2007 at 10:24:55 (UTC)
Goto Top
@echo off & setlocal
> set "Zusammen=D:\Zusammen.txt"  
> if exist "%Zusammen%" del  
> "%Zusammen%"  
> :Loop
> if "%~1" neq "" type  
> %1>>"%Zusammen%" & shift  
> & goto :Loop
> pause
> 
Danke, damit klappts ruckzuck. face-smile

Jetzt wäre es noch genial, wenn man das so einstellen (ändern) könnte, dass ich ein Outputfile angeben kann während sich das Dos-Fenster öffnet. face-wink

Also quasi so:
Ich markiere meine Txt's, ziehe sie auf die Batchdatei, Dos-Fenster öffnet sich, ich ich gebe die output.txt an (die sich immer ändert) und bestätige per Taste.
Mitglied: 13100
13100 Jul 08, 2007 at 11:54:42 (UTC)
Goto Top
einfach den parameter /p hinter dem set befehl bei der ersten zeile
hinzufügen und den text hinter dem istgelichzeichen anpassen.

set /p "Zusammen=Ausgabe: "
Member: Oli-nux
Oli-nux Jul 08, 2007 at 12:37:30 (UTC)
Goto Top
einfach den parameter /p hinter dem set
befehl bei der ersten zeile
hinzufügen und den text hinter dem
istgelichzeichen anpassen.

set /p "Zusammen=Ausgabe: "
Hmm und wie geht das dann genau, wenn ich nicht möchte dass das erstellte File unter "Eigene Dateien" erstellt wird sondern wo ganz anderes?

Vorher gings ja, wenn ich das aber so anpasse und einen Output-Namen für die Txt vergebe dann landet das File in "Eigene Dateien". face-sad
Mitglied: 13100
13100 Jul 08, 2007 at 14:38:38 (UTC)
Goto Top
entwerder kompletten pfad + filename und nich nur filename angeben.
vorher war ja auch d:\zusammen.txt angegeben.

oder alternativ vor jedem %Zusammen% ein d:\ ohne abstand
schreiben, dann reicht bei der angabe der ausgabe nur der dateiname,
wobei dann logischerweise alle ausgaben nach d:\ wandern.
Member: Oli-nux
Oli-nux Jul 08, 2007 at 16:34:21 (UTC)
Goto Top
entwerder kompletten pfad + filename und nich
nur filename angeben.
vorher war ja auch d:\zusammen.txt
angegeben.

oder alternativ vor jedem %Zusammen% ein d:\
ohne abstand
schreiben, dann reicht bei der angabe der
ausgabe nur der dateiname,
wobei dann logischerweise alle ausgaben nach
d:\ wandern.
Ich bin wohl zu doof dafür face-sad ich bitte um den ganzen Code. face-wink
Member: bastla
bastla Jul 08, 2007 at 17:13:17 (UTC)
Goto Top
Hallo Oli-nux!

Ersetze
set "Zusammen=D:\Zusammen.txt"  
durch
set /p Zusammen=Dateiname:
set "Zusammen=D:\Dein Pfad\%Zusammen%.txt"  
dann brauchst Du auch das ".txt" nicht einzugeben ...

Grüße
bastla
Member: Oli-nux
Oli-nux Jul 08, 2007 at 18:11:02 (UTC)
Goto Top
Danke, hat super geklappt. face-smile
Jetzt erleichtert mir das schon sehr die Arbeit. face-smile