PowerShell フォルダーの比較

Sheeraz Gul 2023年6月20日
PowerShell フォルダーの比較

このチュートリアルでは、PowerShell を使用して 2つのフォルダーを比較する方法を示します。

PowerShell フォルダーの比較

PowerShell で 2つのフォルダーを比較するのは、段階的な簡単なプロセスです。 PowerShell の Compare-Object メソッドを使用して、指定されたフォルダーの内容を比較できます。

指定された 2つのフォルダーの段階的なプロセスを参照してください。

フォルダー 1

フォルダー 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 Gul
Sheeraz Gul avatar Sheeraz Gul avatar

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

関連記事 - PowerShell Folder