Mit Batch zwei Textfiles in einem zusammenfügen
Hallo zusammen brauch eure Hilfe bei einem Batch.
Habe zwei .txt Dateien die ich in eine .txt zusammen fügen will.
Hoffe mir kann jemand weiter helfen....
z.b
input1
input1.txt
↓
Inhalt der input1.txt
↓
Name1
Name2
Name3
Name4
...
input2
input2.txt
↓
Inhalt der input2.txt
↓
Bezeichnung1
Bezeichnung2
Bezeichnung3
Bezeichnung4
...
output-aus-1+2
output-aus-1+2.txt
↓
Inhalt der output-aus-1+2.txt
↓
Name1
Bezeichnung1
Name2
Bezeichnung2
Name3
Bezeichnung3
Name4
Bezeichnung4
...
Habe zwei .txt Dateien die ich in eine .txt zusammen fügen will.
Hoffe mir kann jemand weiter helfen....
z.b
input1
input1.txt
↓
Inhalt der input1.txt
↓
Name1
Name2
Name3
Name4
...
input2
input2.txt
↓
Inhalt der input2.txt
↓
Bezeichnung1
Bezeichnung2
Bezeichnung3
Bezeichnung4
...
output-aus-1+2
output-aus-1+2.txt
↓
Inhalt der output-aus-1+2.txt
↓
Name1
Bezeichnung1
Name2
Bezeichnung2
Name3
Bezeichnung3
Name4
Bezeichnung4
...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 232107
Url: https://administrator.de/contentid/232107
Ausgedruckt am: 22.11.2024 um 18:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo BustedDice!
Soferne keine Leerzeilen zu berücksichtigen sind, etwa so:
Grüße
bastla
Soferne keine Leerzeilen zu berücksichtigen sind, etwa so:
@echo off & setlocal
set "Ein1=input1.txt"
set "Ein2=input2.txt"
set "Aus=output-aus-1+2.txt"
del "%Aus%" 2>nul
(for /f "usebackq delims=" %%i in ("%Ein1%") do (
set "Zeile1=%%i"
set "Zeile2="
set /p Zeile2="
setlocal enabledelayedexpansion
>>"%Aus%" echo(!Zeile1!
>>"%Aus%" echo(!Zeile2!
endlocal
))<"%Ein2%
bastla
Hallo BustedDice!
Für eine variable Anzahl von input-Dateien könnte das etwa so aussehen (anzupassen sind die Zeilen 1 und 2):
Das "Zusammenbauen" der Daten findet hier zunächst im Speicher (genauer: im 2-dimensionalen Array A) statt, wobei die Größe des Arrays bestimmt wird, indem vorweg alle Eingabedateien einmal gelesen und auf ihre Zeilenanzahl untersucht werden - daraus und aus der Anzahl der Eingabedateien ergeben sich die Dimensionen von A().
Im zweiten Schritt werden die Dateien der Reihe nach eingelesen, in Zeilen aufgeteilt und die Zeileninhalte dem jeweiligen Array-Element der Ausgabematrix zugeordnet.
Im letzten Schritt werden dann alle Elemente der Ausgabematrix zeilenweise in die Zieldatei geschrieben.
Grüße
bastla
[Edit] Für mehr Flexibilität Feldtrennzeichen hinzugefügt; durch Änderung des Trennzeichens auf ";" könnte zB eine CSV-Datei erzeugt werden [/Edit]
[Edit2] Fehler in Zeile 20 behoben [/Edit2]
Mit VBS hab ich noch nicht viel Erfahrung...
Kann ja noch kommen ...Für eine variable Anzahl von input-Dateien könnte das etwa so aussehen (anzupassen sind die Zeilen 1 und 2):
EinDateien = Array("D:\input1.txt", "D:\input2.txt", "D:\input3.txt", "D:\input4.txt")
AusDatei = "D:\output.txt"
Delim = vbNewline 'Feldtrennzeichen = Zeilenschaltung
'Delim = ";" 'für CSV
DatAnzahl = UBound(EinDateien) 'Anzahl Eingabedateien ermitteln
Set fso = CreateObject("Scripting.FileSystemObject")
MaxZeile = 0
For i = 0 To DatAnzahl 'Alle Eingabedateien durchgehen, ...
Z = Split(fso.OpenTextFile(EinDateien(i)).ReadAll, vbNewline) '... zeilenweise in Matrix einlesen und ...
If UBound(Z) > MaxZeile Then MaxZeile = UBound(Z) '... höchste Zeilenanzahl ermitteln.
Next
ReDim A(MaxZeile, DatAnzahl) 'Matrix für alle Felder (lt Datei- und Zeilenanzahl) erstellen
For Spalte = 0 To DatAnzahl 'Nochmals alles einlesen (je Datei entsteht eine Spalte) ...
Z = Split(fso.OpenTextFile(EinDateien(Spalte)).ReadAll, vbNewline)
For Zeile = 0 To UBound(Z) '... und feldweise ...
A(Zeile, Spalte) = Z(Zeile) ' ... in A-Matrix übertragen.
Next
Next
Set Aus = fso.CreateTextFile(AusDatei)
For Zeile = 0 To MaxZeile 'Alle Felder (= Zeilen)...
For Spalte = 0 To DatAnzahl '... aller Dateien (= Spalten) ...
If Spalte <> DatAnzahl Then
Aus.Write A(Zeile, Spalte) & Delim '... getrennt in Ausgabedatei schreiben; ...
Else
Aus.Write A(Zeile, Spalte) & vbNewLine '... nach dem letzten Feld jedenfalls Zeilenschaltung.
End If
Next
Next
Im zweiten Schritt werden die Dateien der Reihe nach eingelesen, in Zeilen aufgeteilt und die Zeileninhalte dem jeweiligen Array-Element der Ausgabematrix zugeordnet.
Im letzten Schritt werden dann alle Elemente der Ausgabematrix zeilenweise in die Zieldatei geschrieben.
Grüße
bastla
[Edit] Für mehr Flexibilität Feldtrennzeichen hinzugefügt; durch Änderung des Trennzeichens auf ";" könnte zB eine CSV-Datei erzeugt werden [/Edit]
[Edit2] Fehler in Zeile 20 behoben [/Edit2]
Hallo BustedDice!
Hatte leider eine Veschlimmbesserung eingebaut, indem ich die Laufvariablen zunächst - wie üblich - mit i und j benannt, danach aber auf Zeile und Spalte (zur besseren Nachvollziehbarkeit) umbenannt (und im Fall der Zeile 20 leider einmal nicht) hatte - sollte jetzt passen ...
Grüße
bastla
Hatte leider eine Veschlimmbesserung eingebaut, indem ich die Laufvariablen zunächst - wie üblich - mit i und j benannt, danach aber auf Zeile und Spalte (zur besseren Nachvollziehbarkeit) umbenannt (und im Fall der Zeile 20 leider einmal nicht) hatte - sollte jetzt passen ...
Grüße
bastla