ค้นหาเว็บไซต์

วิธีเปรียบเทียบสองโฟลเดอร์ใน PowerShell (พร้อมตัวอย่าง)


คุณสามารถใช้ไวยากรณ์ต่อไปนี้ใน PowerShell เพื่อเปรียบเทียบเนื้อหาของสองโฟลเดอร์:

$folder1 = Get-childitem "c:\users\bobbi\data1"
$folder2 = Get-childitem "c:\users\bobbi\data2"

Compare-Object $folder1 $folder2 -Property Name, Length  |
Where-Object {$_.SideIndicator -eq "<="} |
ForEach-Object {
    Copy-Item "c:\users\bobbi\data1\$($_.name)" -Destination "c:\users\bobbi\data3" -Force
}

สมมติว่าโฟลเดอร์ชื่อ data1 มีไฟล์เดียวกันกับ data2 แต่บางไฟล์ใน data1 ได้รับการอัปเดตด้วยข้อมูลใหม่

ไวยากรณ์เฉพาะนี้จะค้นหาไฟล์ทั้งหมดใน data1 ที่แตกต่างไปจาก data2 และส่งออกไปยังโฟลเดอร์ใหม่ชื่อ data3

ตัวอย่างต่อไปนี้แสดงวิธีใช้ไวยากรณ์นี้ในทางปฏิบัติ

ตัวอย่าง: วิธีเปรียบเทียบสองโฟลเดอร์ใน PowerShell

สมมติว่าเรามีสองโฟลเดอร์ต่อไปนี้ชื่อ data1 และ data2 ใน PowerShell:

เราจะเห็นว่าทั้งสองโฟลเดอร์มีไฟล์เดียวกัน แต่ความยาวของบางไฟล์จะแตกต่างกันระหว่างทั้งสองโฟลเดอร์ เนื่องจาก data1 มีข้อมูลใหม่สำหรับบางไฟล์

สมมติว่าเราต้องการระบุแต่ละไฟล์ด้วยข้อมูลใหม่ในโฟลเดอร์ชื่อ data1 จากนั้นคัดลอกแต่ละไฟล์เหล่านี้ไปยังโฟลเดอร์ใหม่ชื่อ data3 โดยอัตโนมัติ

เราสามารถใช้ไวยากรณ์ต่อไปนี้เพื่อดำเนินการดังกล่าว:

$folder1 = Get-childitem "c:\users\bobbi\data1"
$folder2 = Get-childitem "c:\users\bobbi\data2"

Compare-Object $folder1 $folder2 -Property Name, Length  |
Where-Object {$_.SideIndicator -eq "<="} |
ForEach-Object {
    Copy-Item "c:\users\bobbi\data1\$($_.name)" -Destination "c:\users\bobbi\data3" -Force
}

ภาพหน้าจอต่อไปนี้แสดงวิธีใช้ไวยากรณ์นี้ในทางปฏิบัติ:

โปรดสังเกตว่าเราได้คัดลอกไฟล์ที่อัปเดตทั้งหมดไปยังโฟลเดอร์ชื่อ data3 ในตำแหน่งต่อไปนี้:

c:\users\bobbi\data3

เมื่อเราเรียกใช้ dir “c:\users\bobbi\data3” เราจะสามารถดูเนื้อหาของโฟลเดอร์นี้ได้:

  • player_info.txt
  • task_info.txt

ไฟล์ข้อความทั้งสองนี้แสดงถึงไฟล์ทั้งสองที่มีข้อมูลใหม่ในโฟลเดอร์ชื่อ data1 เปรียบเทียบกับ data2

บทความที่เกี่ยวข้อง