如何在 PowerShell 中使用 Compare-Object?


PowerShell 中的 Compare-Object 命令用於比較兩個物件。物件可以是變數內容、兩個檔案、字串等。此 cmdlet 使用一些語法來顯示物件之間的差異,稱為側向指示符。

=> - Difference in destination object.
<= - Difference in reference (source) object.
== - When the source and destination objects are equal.

示例 1:比較兩個字串。

PS C:\> Compare-Object "World" "Alpha"

InputObject SideIndicator
----------- -------------
Alpha =>
World <=

在上面的例子中,Alpha 字串顯示右側指示符,這意味著它與源物件不同,而 World 字串顯示左側指示符,這意味著它與目標字串不同。

示例 2:比較兩個相等的字串。

下面的示例不會顯示任何輸出,因為源和目標引用物件相同,但是當你使用 -IncludeEqual 引數時,它將顯示匹配物件的相等指示符 (==)。

PS C:\> Compare-Object "World" "woRld"

PS C:\> Compare-Object "World" "woRld" -IncludeEqual

InputObject SideIndicator
----------- -------------
World ==

請注意,Compare-Object 不區分大小寫。對於區分大小寫的比較,請使用 -CaseSensitive 引數。

PS C:\> Compare-Object "World" "woRld" -CaseSensitive


InputObject SideIndicator
----------- -------------
woRld =>
World <=

示例 3:原始檔和目標檔案比較。

$sourcefiles = Get-ChildItem C:\Test1 -Recurse
$destfiles = Get-ChildItem C:\Test2\ -Recurse
Compare-Object $sourcefiles $destfiles -IncludeEqual

輸出

InputObject SideIndicator
----------- -------------
File1.txt ==
File3.txt =>
File2.txt <=

上面的示例顯示 file1.txt 同時存在於兩個位置,而 File3.txt 存在於目標位置,但不存在於源位置;File2.txt 存在於源位置,但不存在於目標位置。

如果我們使用 -ExcludeDifference 引數,除非新增 -IncludeEqual 引數,否則不會顯示輸出。

Compare-Object $sourcefiles $destfiles -ExcludeDifferent

以下命令將僅顯示匹配的檔案。

PS C:\> Compare-Object $sourcefiles $destfiles -IncludeEqual -ExcludeDifferent

InputObject SideIndicator
----------- -------------
File1.txt ==

示例 4:使用屬性名稱進行比較。

要使用特定屬性名稱比較兩個物件,請使用 -Property 引數。在下面的示例中,我們將比較檔案的 LastWriteTime。

示例

$sfiles = Get-ChildItem C:\Test1\ -Recurse
$dfiles = Get-ChildItem C:\Test2\ -Recurse

Compare-Object $sfiles $dfiles -Property LastWriteTime -IncludeEqual

輸出

LastWriteTime SideIndicator
------------- -------------
8/28/2020 7:27:11 AM ==
8/28/2020 7:29:00 AM =>
8/28/2020 7:49:37 AM <=

如果你需要輸出中任何特定屬性的名稱,請先新增該屬性,然後新增要比較的屬性名稱。例如,

示例

Compare-Object $sfiles $dfiles -Property Name, LastWriteTime -IncludeEqual

輸出

Name LastWriteTime SideIndicator
---- ------------- -------------
File1.txt 8/28/2020 7:27:11 AM ==
File3.txt 8/28/2020 7:29:00 AM =>
File2.txt 8/28/2020 7:49:37 AM <=

更新於:2020年11月11日

瀏覽量:10K+

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.