Jeweils erste Zeile von mehreren Textdateien in eine neue Datei schreiben?
Hallo, habe ein Problem 
Hallo,
ich habe ein Verzeichnis mit über 1000 Texdateien. Es steht immer nur in der ersten Zeile etwas drin.
Wie kann ich nun die erste Zeile aller Textdateien hintereinander in eine gemeinsame Textdatei bringen?
Danke
Hallo,
ich habe ein Verzeichnis mit über 1000 Texdateien. Es steht immer nur in der ersten Zeile etwas drin.
Wie kann ich nun die erste Zeile aller Textdateien hintereinander in eine gemeinsame Textdatei bringen?
Danke
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 148046
Url: https://administrator.de/forum/jeweils-erste-zeile-von-mehreren-textdateien-in-eine-neue-datei-schreiben-148046.html
Ausgedruckt am: 22.05.2025 um 18:05 Uhr
7 Kommentare
Neuester Kommentar
Hallo batch0r und willkommen im Forum!
Etwa so (ungetestet):
Da Du Dich über die Inhalte der jeweiligen Zeilen ausschweigst, habe ich (als unverbesserlicher Optimist) angenommen, dass keine Sonderzeichen der Art "<|>&" enthalten sind ...
Grüße
bastla
Etwa so (ungetestet):
@echo off & setlocal
set "Ordner=D:\Der Ordner mit den 1000 Dateien"
set "Typ=txt"
set "Ergebnis=D:\Gemeinsame Textdatei.txt"
del "%Ergebnis%" 2>nul
for %%i in ("%Ordner%\*.%Typ%") do call :ProcessFile "%%i"
goto :eof
:ProcessFile
set /p Zeile=<%1
>>"%Ergebnis%" echo %Zeile%
goto :eof
Grüße
bastla
Hallo batch0r!
Die von Dir genannten Sonderzeichen sind eigentlich unproblematisch - Anführungszeichen in ungerader Anzahl wären allerdings nicht günstig ...
Um genauer nachvollziehen zu können, was der Batch macht (und wo es klemmt), ändere das "
Grüße
bastla
Die von Dir genannten Sonderzeichen sind eigentlich unproblematisch - Anführungszeichen in ungerader Anzahl wären allerdings nicht günstig ...
Um genauer nachvollziehen zu können, was der Batch macht (und wo es klemmt), ändere das "
echo off
" in Zeile 1 auf "echo on
" und starte den Batch direkt von der Kommandozeile. Wenn Du vorweg noch im CMD-Fenster das Systemmenü (in der Titelleiste links) öffnest, dort "Eigenschaften" wählst und im Register "Layout" die "Höhe" der "Fensterpuffergröße" auf 9999 setzt, kannst Du in weiterer Folge entsprechend weit nach oben scrollen, um die Ausgaben in Ruhe anzusehen ...Grüße
bastla
Hallo batch0r und bastla.
Dieses Verhalten ist typisch bei enthaltenen Ampersands (&).
@bastla
Deinen Optimismus in allen Ehren, bei solchen Vorhaben teile ich diesen nicht und gehe lieber gleich auf mehr Sicherheit.
:ProcessFile würde bei mir so aussehen
Grüße
rubberman
Dieses Verhalten ist typisch bei enthaltenen Ampersands (&).
@bastla
Deinen Optimismus in allen Ehren, bei solchen Vorhaben teile ich diesen nicht und gehe lieber gleich auf mehr Sicherheit.
:ProcessFile würde bei mir so aussehen
:ProcessFile
set /p "Zeile="<%1
set "Zeile=%Zeile:^=^^%"
set "Zeile=%Zeile:&=^&%"
set "Zeile=%Zeile:<=^<%"
set "Zeile=%Zeile:>=^>%"
set "Zeile=%Zeile:|=^|%"
>>"%Ergebnis%" echo %Zeile%
goto :eof
Grüße
rubberman
@rubberman
Die Hoffnung (auch auf eine einigermaßen vollständige Beschreibung eines "Problems") stirbt zuletzt
...
Mit Deiner Anpassung sollte es dann aber tatsächlich klappen ...
... ansonsten würde sich schon fast ein VBS der Art
lohnen
(da würden dann, im Gegensatz zum Batch in der derzeitigen Form, auch Leerzeilen nicht unter den Tisch fallen) ...
Grüße
bastla
Die Hoffnung (auch auf eine einigermaßen vollständige Beschreibung eines "Problems") stirbt zuletzt
Mit Deiner Anpassung sollte es dann aber tatsächlich klappen ...
... ansonsten würde sich schon fast ein VBS der Art
Ordner = "D:\Der Ordner mit den 1000 Dateien"
Typ = "txt"
Ergebnis = "D:\Gemeinsame Textdatei.txt"
Typ = LCase(Typ) 'nur zur Sicherheit, damit der Vergleich nachher nicht an Groß-/Kleinschreibung scheitert
Set fso = CreateObject("Scripting.FileSystemObject")
Set Erg = fso.CreateTextFile(Ergebnis)
For Each File In fso.GetFolder(Ordner).Files 'alle Dateien des Ordners durchgehen und ...
If LCase(fso.GetExtensionName(File.Name)) = Typ Then '... jene mit dem passenden Typ bearbeiten, ...
If LCase(Ergebnis) <> LCase(File.Path) Then '... außer, es handelt sich um die Ergebnisdatei
Erg.WriteLine File.OpenAsTextStream.ReadLine 'erste Zeile lesen und schreiben
End If
End If
Next
Erg.Close
WScript.Echo "Fertig."
Grüße
bastla