lfs1993
Goto Top

Mehrere Textdateien in EINE Zeile einer Datei zusammenfassen

Ich verzweifel gerade an einer, für den Kenner hoffentlich einfachen, Sache.

Es stehen diverse Textdateien bereit, teilweise werden diese frisch gefüllt, teilweise sind dort feste Titexl hinterlegt, die dann zusammengefügt Sinn ergeben sollen.
Durch die einfachste Variante, also in etwa:

type text1.txt > ausgabe.txt
type text2.txt >> ausgabe.txt
type text3.txt >> ausgabe.txt
type text4.txt >> ausgabe.txt
type text5.txt >> ausgabe.txt

klappt das auch, jedoch nur mit maximal zweiTexten in einer Zeile, danach folgt ein Umbruch und es wird in Zeile 2 weitergeschrieben!

Ich bräuchte das Ganze aber zwingend in einer Zeile, soll in etwa so ausehen:

"Inhalt text1.txt" "Inhalt text2.txt" "Inhalt text3.txt" "Inhalt text4.txt" "Inhalt text5.txt" .....

Kann man das bewerkstelligen, oder bin ich da mit meinem TYPE-Befehl absolut auf dem Holzweg?

Für Eure Hilfe danke ich schon jetzt sehr!!!

Gruß, LFS1993

Content-Key: 110343

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

Printed on: May 10, 2024 at 22:05 o'clock

Member: bastla
bastla Mar 02, 2009 at 14:41:26 (UTC)
Goto Top
Hallo LFS1993!

Unter der Annahme, dass jede der Dateien nur aus einer Zeile besteht, etwa so:
@echo off & setlocal
set Ein="D:\text1.txt" "D:\text2.txt" "D:\text3.txt" "D:\text4.txt" "D:\text5.txt"  
set "Aus=D:\TextGesamt.txt"  
set Gesamt=

for %%i in (%Ein%) do call :ProcessFile %%i
>"%Aus%" echo %Gesamt:~1%  
goto :eof

:ProcessFile
set /p Zeile=<%1
set Gesamt=%Gesamt% "%Zeile%"  
goto :eof
Soferne die Anführungszeichen bereits im Dateiinhalt enthalten sein sollten (geht aus Deiner Beschreibung nicht eindeutig hervor), einfach in Zeile 12 weg lassen ...

Grüße
bastla
Member: LFS1993
LFS1993 Mar 02, 2009 at 14:46:29 (UTC)
Goto Top
Hi bastla.

Wow, das ging ja sehr schnell, naja, scheint auch nicht sonderlich schwierig zu sein, oder?
Ich teste das gleich heut abend durch und geb dann Bescheid, danke auf jeden Fall jetzt schon!!!!!!
Anführungszeichen brauch ich keine, laß ich dann also weg und ja, in jeder Datei steht meist sogar nur ein Wert oder ein Wort!

Gruß, LFS1993
Member: LFS1993
LFS1993 Mar 03, 2009 at 06:25:30 (UTC)
Goto Top
Also, habe getestet und bin zu folgendem Ergebnis gekommen:

Auf den ersten Blick wunderbar, nur bräuchte ich die Ausgabe komplett ohne Anführungszeichen und ohne Leerzeichen, also Blanks, zwischen den Textbausteinen!

Hatte das etwas unklar formuliert, Ergebnis sollte so sein:

Text1Text2Text3Text4

Zwischen den texten kämen Pipes als Trennzeichen rein, die liefer ich extra, oder kann man die gleich per BAT mit einfügen lassen, wär natürlich riesig!!!!!

Danke schonmal!

Gruß, LFS1993
Member: LFS1993
LFS1993 Mar 03, 2009 at 06:27:12 (UTC)
Goto Top
Also, habe getestet und bin zu folgendem Ergebnis gekommen:

Auf den ersten Blick wunderbar, nur bräuchte ich die Ausgabe komplett ohne Anführungszeichen und ohne Leerzeichen, also Blanks, zwischen den Textbausteinen!

Hatte das etwas unklar formuliert, Ergebnis sollte so sein:

Text1Text2Text3Text4

Zwischen den texten kämen Pipes als Trennzeichen rein, die liefer ich extra, oder kann man die gleich per BAT mit einfügen lassen, wär natürlich riesig!!!!!

Danke schonmal!

Gruß, LFS1993
Member: bastla
bastla Mar 03, 2009 at 07:40:08 (UTC)
Goto Top
Hallo LFS1993!

Dann etwa in dieser Art:
@echo off & setlocal
set Ein="D:\text1.txt" "D:\text2.txt" "D:\text3.txt" "D:\text4.txt" "D:\text5.txt"  
set "Aus=D:\TextGesamt.txt"  
set Gesamt=

for %%i in (%Ein%) do call :ProcessFile %%i
set "Gesamt=%Gesamt:~1%"  
>"%Aus%" echo %Gesamt:@=^|%  
goto :eof

:ProcessFile
set /p Zeile=<%1
set "Gesamt=%Gesamt%@%Zeile%"  
goto :eof
Das in den Zeilen 8 und 13 verwendete Zeichen "@" ist ein Platzhalter für das im Ergebnis gewünschte "|" und sollte in den Texten selbst nicht vorkommen (im Fall des Falles daher zB gegen "$" öÄ austauschen).

Die jetzt in der Zeile 13 befindlichen Anführungszeichen sind übrigens so gewollt (damit nicht ein ev irrtümlich am Ende dieser Zeile stehendes Leerzeichen in der Ergebniszeile landet).

Grüße
bastla

[Edit] Platzhalter "@" für "|" eingefügt. [/Edit]
Member: LFS1993
LFS1993 Mar 03, 2009 at 08:53:40 (UTC)
Goto Top
Bastla, Du bist UNGLAUBLICH!!!!!!!!!!!!!!!!!!

So sieht das doch wirklich genial aus, ich werd das in allen Varianten, die ich benötigen werde testen und geb dann nochmal Bescheid!
Riesig soweit, Du hast schätzungsweise gehörig einen gut bei mir!!!

Danke und bis dann!
Member: LFS1993
LFS1993 Mar 09, 2009 at 09:43:39 (UTC)
Goto Top
Also, ich muß wirklich sagen, Hut ab, hat mein Problem zu 98,5% gelöst!

Nun würde ich gerne nach der Generierung dieser Datei selbige per anderem BAT-Script verschieben lassen, per Aufruf, doch leider gelingt das nicht, denn sobald ich nach dem Teil

:ProcessFile
set /p Zeile=<%1
set "Gesamt=%Gesamt%@%Zeile%"

noch etwas einbaue, und somit den folgenden

goto :eof

etwas verzögere, wird es nix mehr mit der Ausgabe der Datei...

Könnte mir da nochmal jemand helfen, wär echt super!!!

Ich danke schonmal sehr!
Gruß,

LFS1993
Member: Biber
Biber Mar 09, 2009 at 10:07:38 (UTC)
Goto Top
Moin LFS1993,

an der Anzahl der Zeilen, die Du zwischen [set "Gesamt=%Gesamt%@%Zeile%" ] und [goto :eof] einfügst wird es nur liegen, wenn die Anzahl der neuen Zeilen >= 40895 ist. Dann kommt der CMD-Interpreter manchmal durcheinander, hab ich festgestellt.
In fast allen anderen Fällen liegt es am Inhalt der neuen Zeilen.
Magst Du Deine mal posten?

Grüße
Biber
Member: LFS1993
LFS1993 Mar 09, 2009 at 10:14:20 (UTC)
Goto Top
Hi!

Also, entweder würde ich es über

cd "D:\XYZ\$winscp$"
call ABC.bat

versuchen, da diese BAT in einem anderen Verzeichnis, wo auch WinSCp drin ist, liegt, oder die Verbindung per WinSCP direkt ansteueren, also über

winscp.exe /console/script=ABC.txt

Leider führen beide nicht zum gewünschten Erfolg...

Gruß,

LFS1993
Member: Biber
Biber Mar 09, 2009 at 10:27:58 (UTC)
Goto Top
Moin LFS1993,

die (programmablaufmäßig) "letzte Anweisung" in bastlas Schnipsel ist die Zeile 9
-->da ist der Batch eigentlich zu Ende.
Und vor dieses "goto :eof" musst/kanst Du ggf. weitere Anweisungen setzen.

Was Du jetzt geändert hattest war "nur" ein aufgerufener CALL-Block, eine Art Unterprozedur.
Bildlich gesprochen eine kleine Zusatzfunktionalität, die aber nur und ausschließlich die Zeile 06 und deren FOR-Anweisung ein bisschen aufpeppt.

Grüße
Biber
Member: LFS1993
LFS1993 Mar 09, 2009 at 10:31:28 (UTC)
Goto Top
Hurra!

Und schon wieder hast Du einem Unwissenden etwas Wissen gebracht, damit kann ich bestens leben und so klappt das auch, wunderbar!
Tja, wär ich vielleicht durch lange genug rumprobieren auch drauf gekommen, HERZLICHEN DANK!!!!!!

Gruß,

LFS1993