3996875338
Goto Top

Batch: Inhalt zweier Txt Dateien vergleichen

Hallo zusammen,

ich habe 2 Textdateien mit 450 und 300 Computernamen,
Ich möchte beide Listen (Textdateien) miteinander vergleichen und nur einfach vorhandene Einträge in eine neue Liste schreiben.
Und das ganze am liebsten per Batch

Ach ja, die Listen sind nicht sortiert...

Aufbau:

Liste 1 Alte Computer 650 PC´s

Computername02
Computername01
Computername04
Computername03
Computername05

Liste 2 neue Computer 450 PC´s
Computername02
Computername04
Computername01


Ich möchte also feststellen welche Computernamen aus Liste 1 in Liste 2 fehlen und diese in einer neuen Liste ausgeben.
Jetzt schonmal Vielen Dank für eure Unterstützung
LG Leon

Content-ID: 3997361222

Url: https://administrator.de/forum/batch-inhalt-zweier-txt-dateien-vergleichen-3997361222.html

Ausgedruckt am: 13.03.2025 um 13:03 Uhr

3803037559
3803037559 20.09.2022 aktualisiert um 13:53:16 Uhr
Goto Top
Ich möchte also feststellen welche Computernamen aus Liste 1 in Liste 2 fehlen
Pure Batch
@echo off
set "liste1=D:\liste1.txt"  
set "liste2=D:\liste2.txt"  
set "ergebnis=D:\ergebnis.txt"  
findstr /ivl /G:"%liste2%" "%liste1%" >"%ergebnis%"  
Batch with PS
@echo off
set "liste1=D:\liste1.txt"  
set "liste2=D:\liste2.txt"  
set "ergebnis=D:\ergebnis.txt"  
powershell -EP Bypass -C "$liste1 = Get-Content '%liste1%';$liste2 = Get-Content '%liste2%'; $liste1 | ?{$_ -notin $liste2} | Set-Content '%ergebnis%'"  
Cheers
certguy
3063370895
Lösung 3063370895 20.09.2022 aktualisiert um 13:37:31 Uhr
Goto Top
Geht auch Powershell?

$a = Get-Content C:\tmp\a.txt
$b = Get-Content C:\tmp\b.txt
$result = @()
$a | ForEach-Object {
    if (!($b.Contains($_))) {
        $result += $_
    }
}
$b | ForEach-Object {
    if (!($a.Contains($_))) {
        $result += $_
    }
}
Write-Host $result

Geht bestimmt auch eleganter face-smile
3063370895
3063370895 20.09.2022 aktualisiert um 13:49:23 Uhr
Goto Top
Zitat von @3803037559:

@echo off
set "liste1=D:\liste1.txt"  
set "liste2=D:\liste2.txt"  
set "ergebnis=D:\ergebnis.txt"  
powershell -EP Bypass -C "$liste1 = Get-Content '%liste1%';$liste2 = Get-Content '%liste2%'; $liste1 | ?{$_ -notin $liste2} | Set-Content '%ergebnis%'"  
Cheers
certguy

Definitiv mit Where-Object -notin eleganter als meine Variante
Allerdings nicht ganz genau passend zu:

Zitat von @leonknoblechner:
Ich möchte beide Listen (Textdateien) miteinander vergleichen und nur einfach vorhandene Einträge in eine neue Liste schreiben.

Passt aber zu:
Ich möchte also feststellen welche Computernamen aus Liste 1 in Liste 2 fehlen und diese in einer neuen Liste ausgeben.

OP muss sich für eine Fragestellung entscheiden face-smile
TK1987
Lösung TK1987 20.09.2022, aktualisiert am 10.11.2022 um 14:03:31 Uhr
Goto Top
Moin Leon,

als Batch-Only Lösung so:
@echo off

set Liste1=D:\Pfad\zu\Liste 1.txt
set Liste2=D:\Pfad\zu\Liste 2.txt
set Output=D:\Output.txt

for /F "usebackq delims=" %%A in ("%Liste1%") do (>nul 2>&1 findstr "%%A" "%Liste2%"|| >>"%output%" echo %%A)  

Gruß Thomas
3996875338
3996875338 20.09.2022 um 13:56:06 Uhr
Goto Top
dankeschön für die raschen antworten!
Werde das gleich mal testen!