PowerShell でフォルダーを比較する方法

このチュートリアルでは、PowerShell を使用して 2つのフォルダーを比較する方法を示します。
PowerShell フォルダー比較
PowerShell で 2つのフォルダーを比較することは簡単なステップバイステップのプロセスです。指定されたフォルダーの内容を比較するために、PowerShell の Compare-Object
メソッドを使用できます。
指定された 2つのフォルダーのステップバイステップのプロセスを見てみましょう。
フォルダーの内容を取得する
最初のステップは、指定されたフォルダーの内容を取得することです。まず、次のコマンドを実行してフォルダーの子を取得します。
$SourceFolder = Get-ChildItem -Path C:\Users\Sheeraz\DemoFolder1
$DestinationFolder = Get-ChildItem -Path C:\Users\Sheeraz\DemoFolder2
上記のコマンドはフォルダーの内容を取得します。そして、内容を表示するために、宣言された変数を呼び出します。
$SourceFolder
ソースフォルダーの内容の出力は次の通りです:
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
宛先フォルダーの内容の出力は次の通りです:
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
指定されたフォルダーのファイル数とサイズを計算する
これはオプションのステップで、各フォルダーの特定の拡張子を持つファイルの数を数え、各フォルダーのサイズを計算します。次のコマンドを実行してください。
各フォルダーの特定の拡張子を持つファイルの数を数えます:
($DestinationFolder | where { $_.Extension -eq '.java' }).count
上記のコマンドは、宛先フォルダー内の .java
拡張子を持つファイルの数を数えます。私たちのフォルダーに対する出力は 2 です。
同様に、ソースフォルダー内でも:
($SourceFolder | where { $_.Extension -eq '.java' }).count
上記のコマンドは、ソースフォルダー内の .java
拡張子を持つファイルの数を数えます。私たちのフォルダーに対する出力は 2 です。
指定されたフォルダーのサイズを計算するために、次のコマンドを実行します:
($DestinationFolder | Measure-Object -Property length -Sum).Sum
($SourceFolder | Measure-Object -Property length -Sum).Sum
上記のコマンドは、各指定フォルダーのサイズを計算します。私たちのフォルダーの出力は次の通りです:
3061806
128054
名前で指定されたフォルダーを比較する
最初に、ファイル内の内容を比較せずにフォルダーを内容の名前で比較します。コマンドを見てみましょう:
Compare-Object -ReferenceObject $SourceFolder.Name -DifferenceObject $DestinationFolder.Name
上記のコマンドは、名前によってフォルダーの内容を比較し、両方のフォルダーの異なるファイルを表示します。出力を見てみましょう:
InputObject SideIndicator
----------- -------------
composer.json =>
composer.lock =>
composer.phar =>
delftstack - Copy.rtf =>
demo - Copy.bmp =>
これは、これら 5つのファイルが名前でソースフォルダーと異なることを示しています。
フォルダーをファイルの内容で比較する
最後のステップでは、フォルダーのファイルの内容を比較します。この操作を行うには、まずフォルダー内のファイルを hash
に変換する必要があります。
hash
コマンドは使用が簡単です。例えば:
Get-FileHash 'Delftstack.java'
上記のコマンドは、ファイル Delftstack.java
の hash
を取得します。出力を見てみましょう:
Algorithm Hash Path
--------- ---- ----
SHA256 FACF7DD67442E2EF84460669E007DA40D17D82E4448D9DBC7E575D25D6012D30 C:\Users\Sheeraz\Delftstack.java
フォルダー内の各ファイルの hash
を取得するために、foreach
ループを実行する必要があります。コマンドを見てみましょう:
$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 }
上記のコマンドは、両方のフォルダー内の各ファイルの hash
を取得します。それらを表示するためには、次のコマンドを実行する必要があります:
$DestinationFolder.Hash
$SourceFolder.Hash
宛先フォルダーの出力は次の通りです:
BBBFED20764B6B3FAE56DF485778F5F27918B63008B0EBCAF1342CA8ADC3EADF
23D197F445E3264BF230128A7AFB9BF0E65209249D51C4AD70F51F44DF2D83C5
8FE98A01050C92CC6812B8EAD3BD5B6E0BCDC575CE7A93B242BDE497A31D7732
3D543438B2036F4AFF2CBCD9527FDB00CB249CF6D4D01E3FC2E5DA1C693EC76C
FACF7DD67442E2EF84460669E007DA40D17D82E4448D9DBC7E575D25D6012D30
3D543438B2036F4AFF2CBCD9527FDB00CB249CF6D4D01E3FC2E5DA1C693EC76C
DE35F58F1AF9A75902844BA13D5821EB99957B79555330EFF8C9F974C2481932
DE35F58F1AF9A75902844BA13D5821EB99957B79555330EFF8C9F974C2481932
CCCDDAFD5EDB60F6CDB4E20CFE9FEBE74AB15D28AD0E465B56D23247F33B3315
ソースフォルダーの出力は次の通りです:
FACF7DD67442E2EF84460669E007DA40D17D82E4448D9DBC7E575D25D6012D30
3D543438B2036F4AFF2CBCD9527FDB00CB249CF6D4D01E3FC2E5DA1C693EC76C
DE35F58F1AF9A75902844BA13D5821EB99957B79555330EFF8C9F974C2481932
CCCDDAFD5EDB60F6CDB4E20CFE9FEBE74AB15D28AD0E465B56D23247F33B3315
今、私たちは両方のフォルダーの内容をその hash
値によって比較できます。コマンドを見てみましょう:
Compare-Object -ReferenceObject $SourceFolder.Hash -DifferenceObject $DestinationFolder.Hash
上記のコマンドは、2つのフォルダーの内容をその hash
によって比較し、異なる内容のための hash
を出力します。出力を見てみましょう:
InputObject SideIndicator
----------- -------------
BBBFED20764B6B3FAE56DF485778F5F27918B63008B0EBCAF1342CA8ADC3EADF =>
23D197F445E3264BF230128A7AFB9BF0E65209249D51C4AD70F51F44DF2D83C5 =>
8FE98A01050C92CC6812B8EAD3BD5B6E0BCDC575CE7A93B242BDE497A31D7732 =>
3D543438B2036F4AFF2CBCD9527FDB00CB249CF6D4D01E3FC2E5DA1C693EC76C =>
DE35F58F1AF9A75902844BA13D5821EB99957B79555330EFF8C9F974C2481932 =>
異なる内容がどのファイルにあるかを確認できないので、ファイルの名前を示すために次のコマンドを実行します:
(Compare-Object -ReferenceObject $SourceFolder -DifferenceObject $DestinationFolder -Property hash -PassThru).Path
上記のコマンドは、両方のフォルダーに異なる内容を含むファイルへのフルパスを表示します。出力を見てみましょう:
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