PowerShell-Vergleichsordner
Dieses Tutorial zeigt, wie Sie zwei Ordner mit PowerShell vergleichen.
PowerShell-Vergleichsordner
Der Vergleich zweier Ordner in PowerShell ist ein einfacher Schritt-für-Schritt-Prozess. Wir können die Compare-Object
-Methode von PowerShell verwenden, um die Inhalte der angegebenen Ordner zu vergleichen.
Sehen Sie sich den schrittweisen Prozess für die angegebenen zwei Ordner an:
Holen Sie sich den Inhalt der Ordner
Der erste Schritt besteht darin, den Inhalt des angegebenen Ordners abzurufen. Führen Sie zunächst die folgenden Befehle aus, um die untergeordneten Ordner der Ordner abzurufen:
$SourceFolder = Get-ChildItem -Path C:\Users\Sheeraz\DemoFolder1
$DestinationFolder = Get-ChildItem -Path C:\Users\Sheeraz\DemoFolder2
Der obige Befehl ruft den Inhalt des Ordners ab. Und um den Inhalt anzuzeigen, rufen Sie die deklarierte Variable auf:
$SourceFolder
Die Ausgabe für den Inhalt des Quellordners ist:
Directory: C:\Users\Sheeraz\DemoFolder1
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 9/9/2022 12:38 PM 399 Delftstack.java
-a---- 8/30/2022 2:45 PM 51 delftstack.rtf
-a---- 11/1/2022 12:55 PM 127286 demo.bmp
-a---- 7/27/2022 4:15 PM 318 Example1.java
$DestinationFolder
Die Ausgabe für den Inhalt des Zielordners ist:
Directory: C:\Users\Sheeraz\DemoFolder2
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 9/20/2022 5:16 PM 68 composer.json
-a---- 9/20/2022 5:16 PM 4774 composer.lock
-a---- 9/20/2022 4:11 PM 2801573 composer.phar
-a---- 8/30/2022 2:45 PM 51 delftstack - Copy.rtf
-a---- 9/9/2022 12:38 PM 399 Delftstack.java
-a---- 8/30/2022 2:45 PM 51 delftstack.rtf
-a---- 11/1/2022 12:55 PM 127286 demo - Copy.bmp
-a---- 11/1/2022 12:55 PM 127286 demo.bmp
-a---- 7/27/2022 4:15 PM 318 Example1.java
Berechnen Sie die Anzahl der Dateien und die Länge der angegebenen Ordner
Dies ist ein optionaler Schritt, bei dem wir die Anzahl der Dateien mit bestimmten Erweiterungen in jedem Ordner zählen und die Größe jedes Ordners berechnen. Führen Sie die folgenden Befehle aus.
Zählen Sie die Anzahl der Dateien mit einer bestimmten Erweiterung in jedem Ordner:
($DestinationFolder | where {$_.Extension -eq '.java'}).count
Der obige Befehl zählt die Anzahl der Dateien mit der Erweiterung .java
im Zielordner. Die Ausgabe, die wir für unseren Ordner erhalten, ist 2.
Ebenso im Quellordner:
($SourceFolder | where {$_.Extension -eq '.java'}).count
Der obige Befehl zählt die Dateien im Quellordner mit der Erweiterung .java
. Die Ausgabe, die wir für unseren Ordner erhalten, ist 2.
Führen Sie nun die folgenden Befehle aus, um die Größe des angegebenen Ordners zu berechnen:
($DestinationFolder | Measure-Object -Property length -sum).Sum
($SourceFolder | Measure-Object -Property length -sum).Sum
Die obigen Befehle berechnen die Größe jedes angegebenen Ordners. Die Ausgabe für unsere Ordner sieht wie folgt aus:
3061806
128054
Vergleichen Sie die angegebenen Ordner nach Namen
Wir werden zuerst die Ordner nach ihrem Inhaltsnamen vergleichen, der den Inhalt in den Dateien nicht vergleicht. Siehe den Befehl:
Compare-Object -ReferenceObject $SourceFolder.Name -DifferenceObject $DestinationFolder.Name
Der obige Befehl vergleicht den Ordnerinhalt nach Namen und zeigt die verschiedenen Dateien in beiden Ordnern an. Siehe die Ausgabe:
InputObject SideIndicator
----------- -------------
composer.json =>
composer.lock =>
composer.phar =>
delftstack - Copy.rtf =>
demo - Copy.bmp =>
Es zeigt, dass sich diese fünf Dateien namentlich vom Quellordner unterscheiden.
Vergleichen Sie die angegebenen Ordner nach Dateiinhalt
Im letzten Schritt vergleichen wir die Ordner anhand des Inhalts in ihren Dateien. Um diese Operation durchzuführen, müssen wir zuerst die Dateien in Ordnern in hash
konvertieren.
Der Befehl hash
ist einfach zu verwenden. Zum Beispiel:
Get-FileHash 'Delftstack.java'
Der obige Befehl ruft den hash
für die Datei Delftstack.java.
ab. Siehe die Ausgabe:
Algorithm Hash Path
--------- ---- ----
SHA256 FACF7DD67442E2EF84460669E007DA40D17D82E4448D9DBC7E575D25D6012D30 C:\Users\Sheeraz\Delftstack.java
Um den hash
für jede Datei im Ordner zu erhalten, müssen wir die foreach
-Schleife ausführen. Siehe die Befehle:
$SourceFolder = Get-ChildItem -Path C:\Users\Sheeraz\DemoFolder1 | foreach {Get-FileHash -Path $_.FullName}
$DestinationFolder = Get-ChildItem -Path C:\Users\Sheeraz\DemoFolder2 | foreach {Get-FileHash -Path $_.FullName}
Die obigen Befehle erhalten den hash
für jede Datei in beiden Ordnern. Um sie anzuzeigen, müssen wir die folgenden Befehle ausführen:
$DestinationFolder.Hash
$SourceFolder.Hash
Die Ausgabe für den Zielordner lautet:
BBBFED20764B6B3FAE56DF485778F5F27918B63008B0EBCAF1342CA8ADC3EADF
23D197F445E3264BF230128A7AFB9BF0E65209249D51C4AD70F51F44DF2D83C5
8FE98A01050C92CC6812B8EAD3BD5B6E0BCDC575CE7A93B242BDE497A31D7732
3D543438B2036F4AFF2CBCD9527FDB00CB249CF6D4D01E3FC2E5DA1C693EC76C
FACF7DD67442E2EF84460669E007DA40D17D82E4448D9DBC7E575D25D6012D30
3D543438B2036F4AFF2CBCD9527FDB00CB249CF6D4D01E3FC2E5DA1C693EC76C
DE35F58F1AF9A75902844BA13D5821EB99957B79555330EFF8C9F974C2481932
DE35F58F1AF9A75902844BA13D5821EB99957B79555330EFF8C9F974C2481932
CCCDDAFD5EDB60F6CDB4E20CFE9FEBE74AB15D28AD0E465B56D23247F33B3315
Die Ausgabe für den Quellordner lautet:
FACF7DD67442E2EF84460669E007DA40D17D82E4448D9DBC7E575D25D6012D30
3D543438B2036F4AFF2CBCD9527FDB00CB249CF6D4D01E3FC2E5DA1C693EC76C
DE35F58F1AF9A75902844BA13D5821EB99957B79555330EFF8C9F974C2481932
CCCDDAFD5EDB60F6CDB4E20CFE9FEBE74AB15D28AD0E465B56D23247F33B3315
Jetzt können wir den Inhalt beider Ordner anhand ihres hash
-Wertes vergleichen. Siehe den Befehl:
Compare-Object -ReferenceObject $SourceFolder.Hash -DifferenceObject $DestinationFolder.Hash
Der obige Befehl vergleicht den Inhalt zweier Ordner nach ihrem hash
und gibt den hash
für unterschiedliche Inhalte aus. Siehe die Ausgabe:
InputObject SideIndicator
----------- -------------
BBBFED20764B6B3FAE56DF485778F5F27918B63008B0EBCAF1342CA8ADC3EADF =>
23D197F445E3264BF230128A7AFB9BF0E65209249D51C4AD70F51F44DF2D83C5 =>
8FE98A01050C92CC6812B8EAD3BD5B6E0BCDC575CE7A93B242BDE497A31D7732 =>
3D543438B2036F4AFF2CBCD9527FDB00CB249CF6D4D01E3FC2E5DA1C693EC76C =>
DE35F58F1AF9A75902844BA13D5821EB99957B79555330EFF8C9F974C2481932 =>
Da wir nicht sehen können, welche Datei den unterschiedlichen Inhalt hat, führen Sie den folgenden Befehl aus, um den Namen der Dateien anzuzeigen:
(Compare-Object -ReferenceObject $SourceFolder -DifferenceObject $DestinationFolder -Property hash -PassThru).Path
Der obige Befehl zeigt den vollständigen Pfad zu den Dateien mit unterschiedlichem Inhalt in beiden Ordnern an. Siehe die Ausgabe:
C:\Users\Sheeraz\DemoFolder2\composer.json
C:\Users\Sheeraz\DemoFolder2\composer.lock
C:\Users\Sheeraz\DemoFolder2\composer.phar
C:\Users\Sheeraz\DemoFolder2\delftstack.rtf
C:\Users\Sheeraz\DemoFolder2\demo.bmp
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook