Batch zum vergleichen von text Dateien
Hallo,
ich bin leider im Scripte schreiben nicht der beste, also versuch ich mal mein Glück bei euch =).
Ich möchte gerne eine Batch Datei die 2 Texte miteinander vergleicht bzw die Zeilen sollen verglichen werden.
Wenn etwas in der selben Zeile schon drin steht, kann diese übersprungen werden und sollte eine Zeile in a.txt fehlen und b.txt vorhanden
sein, soll diese bitte in a kopiert werden. Das sollte nach Möglichkeit bis zum Ende beider Dateien durchgeführt werden.
b.txt soll die Vergleichsdatei sein und a.txt die angepasste/ergänzte sein (beides aus Verzeichnissen bitte)
zur Veranschaulichung:
A.txt
Test a = 1
Test a = 2
Test a = 3
B.txt
Test b = 1
Test b = 2
Test b = 3
Test b = 4
Nun fehlt in A.txt "Test b = 4" diese soll bitte in A.txt an der selben stelle hinein kopiert werden.
Hättet ihr dafür eine Lösung ? ^^ würde mich freuen
Grüße
ich bin leider im Scripte schreiben nicht der beste, also versuch ich mal mein Glück bei euch =).
Ich möchte gerne eine Batch Datei die 2 Texte miteinander vergleicht bzw die Zeilen sollen verglichen werden.
Wenn etwas in der selben Zeile schon drin steht, kann diese übersprungen werden und sollte eine Zeile in a.txt fehlen und b.txt vorhanden
sein, soll diese bitte in a kopiert werden. Das sollte nach Möglichkeit bis zum Ende beider Dateien durchgeführt werden.
b.txt soll die Vergleichsdatei sein und a.txt die angepasste/ergänzte sein (beides aus Verzeichnissen bitte)
zur Veranschaulichung:
A.txt
Test a = 1
Test a = 2
Test a = 3
B.txt
Test b = 1
Test b = 2
Test b = 3
Test b = 4
Nun fehlt in A.txt "Test b = 4" diese soll bitte in A.txt an der selben stelle hinein kopiert werden.
Hättet ihr dafür eine Lösung ? ^^ würde mich freuen
Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 491524
Url: https://administrator.de/forum/batch-zum-vergleichen-von-text-dateien-491524.html
Ausgedruckt am: 16.02.2025 um 20:02 Uhr
16 Kommentare
Neuester Kommentar
Das kennst du?
fc /?
Vergleicht zwei Dateien oder zwei Sätze von Dateien und zeigt die
Unterschiede zwischen ihnen an.
FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LINE]][/T] [/U] [/W] [/nnnn]
[Laufwerk1:][Pfad1]Dateiname1[Laufwerk2:][Pfad2]Dateiname2
FC /B [Laufwerk1:][Pfad1]Dateiname1 [Laufwerk2:][Pfad2]Dateiname2
/A Zeigt nur die erste und letzte Zeile jedes Satzes von
Unterschieden an.
/B Führt einen binären Vergleich durch.
/C Vergleicht ohne Rücksicht auf Groß-/Kleinschreibung.
/L Vergleicht Dateien als ASCII-Textdateien.
/LBn Stellt die maximale Zahl aufeinander folgender, unterschiedlicher
Zeilen auf die angegebene Anzahl n ein.
/N Zeigt bei einem ASCII-Vergleich die Zeilennummern an.
/OFF[LINE] Überspringt keine Offlinedateien.
/T Expandiert Tabulatorzeichen nicht zu Leerzeichen.
/U Vergleicht Dateien als UNICODE-Textdateien.
/W Komprimiert Tabulatoren und Leerzeichen für den Vergleichsvorgang.
/nnnn Anzahl aufeinander folgender Zeilen, die nach einem Unterschied
wieder übereinstimmen müssen.
[Laufwerk1:][Pfad1]Dateiname1
Gibt die erste Datei bzw. ersten Dateisatz zum Vergleichen an.
[Laufwerk2:][Pfad2]Dateiname2
Gibt die zweite Datei bzw. zweiten Dateisatz zum Vergleichen an.
fc /?
Vergleicht zwei Dateien oder zwei Sätze von Dateien und zeigt die
Unterschiede zwischen ihnen an.
FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LINE]][/T] [/U] [/W] [/nnnn]
[Laufwerk1:][Pfad1]Dateiname1[Laufwerk2:][Pfad2]Dateiname2
FC /B [Laufwerk1:][Pfad1]Dateiname1 [Laufwerk2:][Pfad2]Dateiname2
/A Zeigt nur die erste und letzte Zeile jedes Satzes von
Unterschieden an.
/B Führt einen binären Vergleich durch.
/C Vergleicht ohne Rücksicht auf Groß-/Kleinschreibung.
/L Vergleicht Dateien als ASCII-Textdateien.
/LBn Stellt die maximale Zahl aufeinander folgender, unterschiedlicher
Zeilen auf die angegebene Anzahl n ein.
/N Zeigt bei einem ASCII-Vergleich die Zeilennummern an.
/OFF[LINE] Überspringt keine Offlinedateien.
/T Expandiert Tabulatorzeichen nicht zu Leerzeichen.
/U Vergleicht Dateien als UNICODE-Textdateien.
/W Komprimiert Tabulatoren und Leerzeichen für den Vergleichsvorgang.
/nnnn Anzahl aufeinander folgender Zeilen, die nach einem Unterschied
wieder übereinstimmen müssen.
[Laufwerk1:][Pfad1]Dateiname1
Gibt die erste Datei bzw. ersten Dateisatz zum Vergleichen an.
[Laufwerk2:][Pfad2]Dateiname2
Gibt die zweite Datei bzw. zweiten Dateisatz zum Vergleichen an.
Hallo,
Gruß,
Peter
Zitat von @Bellamiiii:
Ich möchte gerne eine Batch Datei die 2 Texte miteinander vergleicht bzw die Zeilen sollen verglichen werden.
In dein Beispiel ist grundsätzlich jede Zeile unterschiedlich, soll also alles dann auch in a.Text rein kopiert werden. Denn Test a=1 ist ungleich Test b=1.Ich möchte gerne eine Batch Datei die 2 Texte miteinander vergleicht bzw die Zeilen sollen verglichen werden.
Gruß,
Peter
![140913](/images/members/profile_male_48x48.png)
@echo off
set "file1=C:\datei1.txt"
set "file2=C:\datei2.txt"
powershell -Executionpolicy ByPass -NoP -C "Compare (gc '%file1%') (gc '%file2%') -IncludeEqual -PassThru | sort | sc '%file1%'"
![140913](/images/members/profile_male_48x48.png)
Nein wird es nicht, es wird in der Reihenfolge abgelegt wir in deinem Beispiel, ansonsten unzureichende Infos zum Abgleich
![140913](/images/members/profile_male_48x48.png)
Immer noch zu ungenau spezifiziert, so?
https://tio.run/##K8gvTy0qzkjNyfn/XyVRwVbBUMdIx0THTMfQQMcQyDbSMTbmUkmCSh ...
BTW. Die Vorgehensweise ist wirklich Bullshit. Nimm ne XML oder ne INI oder ne CSV als Datenbasis, das Zeilengedöns fällt dir ganz sicher bald auf die Füße.
https://tio.run/##K8gvTy0qzkjNyfn/XyVRwVbBUMdIx0THTMfQQMcQyDbSMTbmUkmCSh ...
BTW. Die Vorgehensweise ist wirklich Bullshit. Nimm ne XML oder ne INI oder ne CSV als Datenbasis, das Zeilengedöns fällt dir ganz sicher bald auf die Füße.
![140913](/images/members/profile_male_48x48.png)
INI Files haben einen anderen Aufbau da funktioniert dein Vorhaben nicht da jede Sektion auch gleichnamige Einträge aufweisen darf und die Sektionen an beliebiger Stelle stehen dürfen, deshalb behandelt man INI-Dateien anders, z.B. mit den passenden Funktionen:
Arbeiten mit INI Files in VBScript
Da durchläuft man jede Section und vergleicht die Section mit der der anderen Datei und bei Bedarf fügt man dann eine fehlende Property hinzu oder eben nicht.
Arbeiten mit INI Files in VBScript
Da durchläuft man jede Section und vergleicht die Section mit der der anderen Datei und bei Bedarf fügt man dann eine fehlende Property hinzu oder eben nicht.
![140913](/images/members/profile_male_48x48.png)
Machs gleich mit der Powershell (kannst du bei Bedarf ja aus deiner Batch heraus aufrufen):
$pathA = 'D:\a.ini'
$pathB = 'D:\b.ini'
function Get-IniContent([string]$ini){
$dic = [ordered]@{}
$content = gc $ini -raw
if ($content -ne $null){
[regex]::matches($content,'(?ism)^\[(?<Sectionheader>[^\]]+)\]\s*(?<Sectionbody>.*?(?=(^\[|\Z)))').Captures | ?{$_.Success} | %{
$props = [ordered]@{}
$_.Groups['Sectionbody'].Value -split '[\r\n]+' | ?{$_ -match '='} | %{
$line = $_.split('=')
$props.($line.trim()) = $line[1].trim().trim('"')
}
$dic.($_.Groups['Sectionheader'].Value) = $props
}
}
return $dic
}
function Set-IniContent($hashtable,$path){
$out = @()
$hashtable.GetEnumerator() | %{
$out += "[" + $_.Key + "]"
$_.Value.GetEnumerator() | %{
$out+= $_.Key + "=" + $_.Value
}
$out += ""
}
$out | sc $path
}
$a = Get-IniContent $pathA
$b = Get-IniContent $pathB
foreach($section in $b.GetEnumerator()){
foreach($prop in $section.Value.GetEnumerator()){
if ($prop.Name -notin $a[$section.Name].Keys){
$a[$section.Name][$prop.Name] = $prop.Value
}
}
}
Set-IniContent -hashtable $a -Path $pathA
Hallo,
nutze doch Winmerge.
Du kannst es auch per Batch ansprechen. Die Parameter dafür findest Du hier: http://manual.winmerge.org/Command_line.html
Ich denke das auto-merge am ende ist das was du tun willst?
Gruß
...
nutze doch Winmerge.
Du kannst es auch per Batch ansprechen. Die Parameter dafür findest Du hier: http://manual.winmerge.org/Command_line.html
Ich denke das auto-merge am ende ist das was du tun willst?
Gruß
...
![140913](/images/members/profile_male_48x48.png)
Klappt hier einwandfrei, sind deine Dateien und der uns unbekannte Inhalt. Ich bin raus, hab jetzt kein Bock noch 10 mal nach dem Inhalt und Format zu fragen. Bei einer regulär und nach Vorschrift definierten INI funktioniert es problemlos, sorry.
Ciao.
Ciao.