Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Mehrere Textdateien in EINE Zeile einer Datei zusammenfassen

Frage Entwicklung Batch & Shell

Mitglied: LFS1993

LFS1993 (Level 1) - Jetzt verbinden

02.03.2009, aktualisiert 15:00 Uhr, 4538 Aufrufe, 11 Kommentare

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
Mitglied: bastla
02.03.2009 um 15:41 Uhr
Hallo LFS1993!

Unter der Annahme, dass jede der Dateien nur aus einer Zeile besteht, etwa so:
01.
@echo off & setlocal 
02.
set Ein="D:\text1.txt" "D:\text2.txt" "D:\text3.txt" "D:\text4.txt" "D:\text5.txt" 
03.
set "Aus=D:\TextGesamt.txt" 
04.
set Gesamt= 
05.
 
06.
for %%i in (%Ein%) do call :ProcessFile %%i 
07.
>"%Aus%" echo %Gesamt:~1% 
08.
goto :eof 
09.
 
10.
:ProcessFile 
11.
set /p Zeile=<%1 
12.
set Gesamt=%Gesamt% "%Zeile%" 
13.
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
Bitte warten ..
Mitglied: LFS1993
02.03.2009 um 15:46 Uhr
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
Bitte warten ..
Mitglied: LFS1993
03.03.2009 um 07:25 Uhr
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
Bitte warten ..
Mitglied: LFS1993
03.03.2009 um 07:27 Uhr
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
Bitte warten ..
Mitglied: bastla
03.03.2009 um 08:40 Uhr
Hallo LFS1993!

Dann etwa in dieser Art:
01.
@echo off & setlocal 
02.
set Ein="D:\text1.txt" "D:\text2.txt" "D:\text3.txt" "D:\text4.txt" "D:\text5.txt" 
03.
set "Aus=D:\TextGesamt.txt" 
04.
set Gesamt= 
05.
 
06.
for %%i in (%Ein%) do call :ProcessFile %%i 
07.
set "Gesamt=%Gesamt:~1%" 
08.
>"%Aus%" echo %Gesamt:@=^|% 
09.
goto :eof 
10.
 
11.
:ProcessFile 
12.
set /p Zeile=<%1 
13.
set "Gesamt=%Gesamt%@%Zeile%" 
14.
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]
Bitte warten ..
Mitglied: LFS1993
03.03.2009 um 09:53 Uhr
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!
Bitte warten ..
Mitglied: LFS1993
09.03.2009 um 10:43 Uhr
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
Bitte warten ..
Mitglied: Biber
09.03.2009 um 11:07 Uhr
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
Bitte warten ..
Mitglied: LFS1993
09.03.2009 um 11:14 Uhr
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
Bitte warten ..
Mitglied: Biber
09.03.2009 um 11:27 Uhr
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
Bitte warten ..
Mitglied: LFS1993
09.03.2009 um 11:31 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
Suche passender Treiber (12)

Frage von stolli zum Thema Windows Server ...

Peripheriegeräte
Wlan stört Funkmaus (11)

Frage von Falaffel zum Thema Peripheriegeräte ...

Peripheriegeräte
gelöst USB Festplatte verliert Laufwerksbuchstabe (9)

Frage von cese4321 zum Thema Peripheriegeräte ...