Powershell Script um Inhalt von Dateien zu vergleichen
Hallo an alle,
hoffe ich bin hier richtig...
Ich würde ein Powershell script benötigen, welche mir hilft Dateien in einem Ordner zu vergleichen und mir die Unterschied in eine CSV zu schreiben.
Soweit habe ich das mit den Dateien bereits geschafft:
$o1 = Get-ChildItem -Recurse -Path c:\pstest\o1
$o2 = Get-ChildItem -Recurse -Path c:\pstest\o2
Compare-Object -ReferenceObject $o1 -DifferenceObject $o2 | Export-Csv -path "C:\pstest\differences_folder.csv"
Das funktionier soweit ganz gut. Es vergleicht die Dateien im Ordner und listet mir auf welche Dateien in welchem Ordner fehlen. Um die Formatierung hätte ich mich noch gekümmert
Es sollte aber auch möglich sein, dass mir das Script die Unterschiede in den Dateien auflistet. Also den Inhalt der Dateien vergleicht und mir angibt wo etwas verändert oder gelöscht wurde.
Ist dies mit PS möglich?
Wenn ja, wie?
Schon mal vielen Dank!!
LG Simon
hoffe ich bin hier richtig...
Ich würde ein Powershell script benötigen, welche mir hilft Dateien in einem Ordner zu vergleichen und mir die Unterschied in eine CSV zu schreiben.
Soweit habe ich das mit den Dateien bereits geschafft:
$o1 = Get-ChildItem -Recurse -Path c:\pstest\o1
$o2 = Get-ChildItem -Recurse -Path c:\pstest\o2
Compare-Object -ReferenceObject $o1 -DifferenceObject $o2 | Export-Csv -path "C:\pstest\differences_folder.csv"
Das funktionier soweit ganz gut. Es vergleicht die Dateien im Ordner und listet mir auf welche Dateien in welchem Ordner fehlen. Um die Formatierung hätte ich mich noch gekümmert
Es sollte aber auch möglich sein, dass mir das Script die Unterschiede in den Dateien auflistet. Also den Inhalt der Dateien vergleicht und mir angibt wo etwas verändert oder gelöscht wurde.
Ist dies mit PS möglich?
Wenn ja, wie?
Schon mal vielen Dank!!
LG Simon
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 302475
Url: https://administrator.de/contentid/302475
Ausgedruckt am: 25.11.2024 um 03:11 Uhr
14 Kommentare
Neuester Kommentar
Findest du hier diverse Threads ...
Variablen oder Dateien nach Inhalt Vergleichen Powershell
Gruß jodel32
Variablen oder Dateien nach Inhalt Vergleichen Powershell
Gruß jodel32
Naja die Essenz ist doch mit get-content den Inhalt jeder Datei zu holen und mit dem Content der anderen Datei mit compare-object zu vergleichen.
Mit Get-Childitem die Dateien auflisten und mit foreach Schleife durchlaufen. Prüfen ob eine Datei in einem Ordner existiert machst du mit Test-Path. In der foreach Schleife dann den Inhalt beider Dateien mit compare-item vergleichen und Änderungen wegschreiben, fertig.
Damit hast du alle Werkzeuge die du brauchst.
Findest du hier in hunderten von Skripten im Forum.
Damit hast du alle Werkzeuge die du brauchst.
Findest du hier in hunderten von Skripten im Forum.
Hallo Simon,
ab PS 3.0
Grüße Uwe
Es sollte aber auch möglich sein, dass mir das Script die Unterschiede in den Dateien auflistet. Also den Inhalt der Dateien vergleicht und mir angibt wo etwas verändert oder gelöscht wurde.
das kannst du so machen:$dir1 = 'c:\pstest\o1' # Verzeichnis 1
$dir2 = 'c:\pstest\o2' # Verzeichnis 2
# Nur die paarweise vorhandenen Dateinamen beider Verzeichnisse holen
compare (gci $dir1 -File).Name (gci $dir2 -File).Name -IncludeEqual -ExcludeDifferent -PassThru | %{
# Inhalt der Dateien vergleichen
$diff = compare (gc "$dir1\$_") (gc "$dir2\$_")
# Gibt es einen Unterschied , gebe ihn auf der Konsole aus
if ($diff){
write-host "Unterschiede in der Datei $_`n$('='*50)" -F Green
$diff | ft -AutoSize
}
}
Grüße Uwe
$diff | export-csv 'c:\datei.csv' -Delimiter ";" -NoType -Encoding UTF8 -Append
Zitat von @zamsi7:
Nur wie könnte ich nun noch zu jeder Zeile den Zusatz $_ (Also den Dateinamen) hängen?
Nur wie könnte ich nun noch zu jeder Zeile den Zusatz $_ (Also den Dateinamen) hängen?
if ($diff){
[pscustomobject] @{'Dateiname'=$_;'Unterschied'=[regex]::replace(($diff | ft -AutoSize -HideTableHeaders | out-string),'(?ism)^\s*$','')} | export-csv 'C:\unterschiede.csv' -Delimiter ";" -NoType -Encoding UTF8 -Append
}
Alternative ist folgende: Dann hast du aber mehrere Zeilen zu einer Datei und jeweils den Dateinamen dazu
if ($diff){
$diff | Add-Member -MemberType NoteProperty -Name 'Dateiname' -Value $_ -PassThru | export-csv 'C:\unterschiede.csv' -Delimiter ";" -NoType -Encoding UTF8 -Append
}
Grüße Uwe
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.