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
コマンドは使いやすいです。 例えば:
Get-FileHash 'Delftstack.java'
上記のコマンドは、ファイル Delftstack.java.
の ハッシュ
を取得します。 出力を参照してください。
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}
上記のコマンドは、両方のフォルダー内の各ファイルの ハッシュ
を取得します。 それらを表示するには、次のコマンドを実行する必要があります。
$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つのフォルダーの内容を ハッシュ
で比較し、異なる内容の ハッシュ
を出力します。 出力を参照してください。
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