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-Key: 3997361222

Url: https://administrator.de/contentid/3997361222

Printed on: May 4, 2024 at 19:05 o'clock

Mitglied: 3803037559
3803037559 Sep 20, 2022 updated at 11:53:16 (UTC)
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
Mitglied: 3063370895
Solution 3063370895 Sep 20, 2022 updated at 11:37:31 (UTC)
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
Mitglied: 3063370895
3063370895 Sep 20, 2022 updated at 11:49:23 (UTC)
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
Member: TK1987
Solution TK1987 Sep 20, 2022, updated at Nov 10, 2022 at 13:03:31 (UTC)
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
Mitglied: 3996875338
3996875338 Sep 20, 2022 at 11:56:06 (UTC)
Goto Top
dankeschön für die raschen antworten!
Werde das gleich mal testen!