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

ขอแนะนำคำสั่ง PowerShell Unzip และ Zip บนไฟล์เก็บถาวร


การบีบอัดหรือขยายไฟล์เดียวหรือหลายไฟล์เป็นทักษะอันทรงคุณค่าที่ผู้ใช้ PowerShell ทุกคนสามารถใช้งานได้ทันที บางทีคุณอาจต้องการลดขนาดไฟล์ลงเล็กน้อยหรือเพียงเก็บไฟล์ไว้ในที่อื่นที่ไม่ใช่โฟลเดอร์ หากเป็นเช่นนั้น ให้ PowerShell คลายซิปและบีบอัดไฟล์ของคุณโดยใช้คำสั่ง

ในบทช่วยสอนนี้ คุณจะได้เรียนรู้หลายวิธีในการซิปและแตกไฟล์ใน PowerShell

พร้อม? มาเริ่มกลิ้งกันเถอะ!

ข้อกำหนดเบื้องต้น

ตัวอย่างในบทช่วยสอนนี้จะใช้ PowerShell 7.1.x คำสั่งนี้ยังใช้งานได้บน Windows PowerShell 5.1

การบีบอัดไฟล์ด้วยคำสั่ง Compress-Archive

คุณใช้แอปพลิเคชันเพื่อบีบอัดและเก็บไฟล์มานานหลายปีโดยคลิกที่ GUI แต่คุณรู้หรือไม่ว่าคุณสามารถทำงานเดียวกันใน PowerShell ได้ การใช้คำสั่ง Compress-Archive ทำให้คุณสามารถบีบอัดไฟล์ได้อย่างง่ายดาย

ลองนึกภาพสักครู่ว่าคุณมีไฟล์ไม่กี่ไฟล์ที่จะส่งให้กับลูกค้า ไฟล์อยู่ในโฟลเดอร์บนคอมพิวเตอร์ของคุณที่อาจมีลักษณะคล้ายกับภาพหน้าจอด้านล่าง บทช่วยสอนนี้อ้างอิงไฟล์เหล่านี้สำหรับการรันคำสั่ง แต่คุณสามารถใช้ไฟล์ใดก็ได้ตามที่คุณต้องการ

การบีบอัดไฟล์ทีละไฟล์

ก่อนที่คุณจะสามารถบีบอัดไฟล์เดียวได้ คุณต้องมีสองสิ่งก่อน แหล่งที่มาและปลายทาง

เปิด PowerShell ในฐานะผู้ดูแลระบบ จากนั้นเรียกใช้คำสั่งด้านล่างเพื่อบีบอัดไฟล์เดียว (widget.png) เป็นไฟล์ ZIP (archive.zip) พารามิเตอร์ -Path จะบอกคำสั่ง Compress-Archive ถึงตำแหน่งของไฟล์ที่จะบีบอัด ในขณะที่ -DestinationPath จะบอกตำแหน่งที่จะเก็บไฟล์

 Compress-Archive -Path widget.png -DestinationPath archive.zip

บีบอัดหลายไฟล์พร้อมกันโดยคั่นด้วยเครื่องหมายจุลภาค เช่น บีบอัด-เก็บถาวร -Path widget.png,file1.txt,manual.pdf -DestinationPath archive.zip

การบีบอัดไฟล์ทั้งหมดจากโฟลเดอร์

หากคุณได้จัดระเบียบไฟล์ในโฟลเดอร์ที่คุณต้องการบีบอัดในคราวเดียว ให้ใช้อักขระไวด์การ์ด เช่น เครื่องหมายดอกจัน (*) เพื่อแสดงว่าไฟล์ทั้งหมดเหมาะสมที่สุด

เรียกใช้คำสั่งด้านล่างเพื่อบีบอัดและเก็บถาวร (Compress-Archive) ไฟล์ทั้งหมด (*) จากโฟลเดอร์ C:\Demo ไปยัง archive.zip ไฟล์

Compress-Archive -Path 'C:\Demo\*' -DestinationPath archive.zip

ตอนนี้บางทีคุณอาจต้องการบีบอัดไฟล์ประเภทเดียวกันเท่านั้น หากเป็นเช่นนั้น ให้รวมสัญลักษณ์ไวด์การ์ดเข้ากับนามสกุลไฟล์เพื่อบีบอัด

เรียกใช้คำสั่งด้านล่างเพื่อบีบอัดและเก็บถาวรไฟล์บันทึกทั้งหมด (*.log) ไปยังไฟล์ archive.zip

Compress-Archive -Path '*.log' -DestinationPath archive.zip

การกำหนดระดับการบีบอัด

จากตัวอย่างก่อนหน้านี้ คุณได้บีบอัดไฟล์ด้วยระดับการบีบอัดเริ่มต้น (เหมาะสมที่สุด) แต่จะครอบคลุมระดับการบีบอัดต่างๆ กัน ระดับการบีบอัดจะกำหนดจำนวนการบีบอัดที่ใช้เมื่อคุณสร้างไฟล์เก็บถาวร

ด้านล่างนี้คือพารามิเตอร์ระดับการบีบอัดสามรายการที่คุณสามารถเลือกได้:

  • เหมาะสมที่สุด (ค่าเริ่มต้น) - เวลาในการบีบอัดขึ้นอยู่กับจำนวนและขนาดของไฟล์
  • เร็วที่สุด - วิธีการบีบอัดที่เร็วที่สุด ส่งผลให้ขนาดไฟล์ใหญ่ขึ้น
  • NoCompression - ทำให้ขนาดไฟล์ไม่เปลี่ยนแปลง

เรียกใช้คำสั่งด้านล่างเพื่อดูว่าแต่ละระดับการบีบอัดทำงานอย่างไร แต่ละคำสั่งจะบีบอัดไฟล์บันทึก (*.log) ลงในไฟล์ archive.zip

# Optimal (Default compression level) 
Compress-Archive -Path '*.log' -DestinationPath archive.zip
# Fastest compression level
Compress-Archive -Path '*.log' -DestinationPath archive.zip -CompressionLevel Fastest
# No compression
Compress-Archive -Path '*.log' -DestinationPath archive.zip -CompressionLevel NoCompression

การเพิ่มไฟล์ลงในไฟล์บีบอัด

ตอนนี้ หากคุณลืมเพิ่มไฟล์ลงในไฟล์เก็บถาวร อย่าเพิ่งตกใจ! มีพารามิเตอร์ -Update ที่คุณสามารถใช้เพื่อเพิ่มไฟล์ลงในไฟล์เก็บถาวรที่มีอยู่

เรียกใช้คำสั่งด้านล่างเพื่อเพิ่ม (-Update) ไฟล์ที่คุณต้องการ (manual.pdf) ไปยังไฟล์เก็บถาวรที่มีอยู่ (archive.zip)

Compress-Archive -Update -Path 'manual.pdf' -DestinationPath archive.zip

พารามิเตอร์ -Update จะบอกคำสั่ง Compress-Archive ให้เขียนทับไฟล์ที่มีอยู่ด้วยไฟล์ใหม่โดยอัตโนมัติ แต่ควรระวังเมื่อคุณเพิ่มไฟล์ลงในไฟล์เก็บถาวร คุณคงไม่อยากเขียนทับไฟล์ของคุณด้วยไฟล์เก่า

การขยายไฟล์ ZIP ด้วยคำสั่ง Expand-Archive

เช่นเดียวกับที่คุณบีบอัดไฟล์ การขยายไฟล์เก็บถาวรก็ไม่ได้แตกต่างกันมากนัก คุณจะต้องเรียกใช้คำสั่ง Expand-Archive ในขณะที่ระบุเส้นทางต้นทางและปลายทาง คำสั่ง Expand-Archive ช่วยให้คุณสามารถแยกไฟล์ที่เก็บถาวรได้

เรียกใช้คำสั่ง Expand-Archive ด้านล่างเพื่อแยกเนื้อหาของไฟล์ archive.zip เนื่องจากไม่ได้ระบุเส้นทางปลายทาง คำสั่งจึงสร้างโฟลเดอร์ปลายทางในไดเร็กทอรีการทำงาน โฟลเดอร์ปลายทางมีชื่อเหมือนกับไฟล์เก็บถาวร (เก็บถาวร)

Expand-Archive -Path archive.zip -DestinationPath C:\Demo\Archive

เพิ่มพารามิเตอร์ -Force เพื่อระงับข้อความแจ้งการยืนยันทั้งหมด

หากคุณใช้ Expand-Archive กับไฟล์เก็บถาวรที่มีไฟล์ที่ไม่ได้บีบอัดในรูปแบบ UTF-8 ชื่อไฟล์ที่แยกออกมาอาจแตกต่างจากแหล่งที่มา

การแสดงรายการไฟล์บีบอัดผ่าน .NET

ไม่มีทางใดในสอง cmdlets ก่อนหน้านี้ที่คุณได้เรียนรู้ว่าจะช่วยให้คุณสามารถดูภายในไฟล์เก็บถาวรโดยไม่ต้องขยายก่อน บางทีคุณอาจลืมว่าไฟล์ใดที่คุณบีบอัดไว้แล้ว หากเป็นเช่นนั้น การแยกทุกอย่างออกเพียงเพื่อตรวจสอบว่าไฟล์ใดที่คุณเก็บถาวรไว้แล้วจะเป็นการเสียเวลา

วิธีที่ดีกว่าในการดูไฟล์เก็บถาวรคือการใช้คลาส .NET ZipFile ในฐานะส่วนหนึ่งของเนมสเปซ System.IO.Compression คลาส .NET ZipFile มีเมธอดที่เรียกว่า OpenRead(String) ซึ่งช่วยให้คุณสามารถดูภายในไฟล์เก็บถาวรที่มีอยู่ได้

เรียกใช้คำสั่งด้านล่างเพื่ออ่านแต่ละไฟล์ในไฟล์ archive.zip (OpenRead("$pwd\archive.zip")) และกำหนดผลลัพธ์ให้กับ ตัวแปร $archive

# (pwd) - working/current directory
$archive = [System.IO.Compression.ZipFile]::OpenRead("$pwd\archive.zip")

ตอนนี้ให้รันคำสั่งด้านล่างเพื่อแสดงรายการแต่ละไฟล์ที่กำหนดในตัวแปร $archive ตามชื่อ (Select-Object -Property Name)

$archive.Entries | Select-Object -Property Name

ด้านล่างนี้ คุณจะเห็นคำสั่งที่แสดงไฟล์บีบอัดแต่ละไฟล์ในไฟล์ archive.zip

หากคุณต้องการดูคุณสมบัติของแต่ละไฟล์แทน ให้อ้างอิงคุณสมบัติ Entries แทน

$archive.Entries

ตอนนี้คุณจะเห็นคุณสมบัติของทุกไฟล์ในไฟล์เก็บถาวร คล้ายกับภาพที่แสดงด้านล่าง

Powershell Unzip และไฟล์ Zip ด้วยโมดูล 7Zip4PowerShell

บทช่วยสอนเกี่ยวกับการบีบอัดและขยายไฟล์ zip จะไม่สมบูรณ์หากไม่มีการกล่าวถึงโมดูลการบีบอัดอื่น 7Zip4PowerShell 7Zip4PowerShell มีความสามารถที่ได้รับการปรับปรุงซึ่งอาจทำให้เป็นตัวเลือกที่มีฟีเจอร์หลากหลาย

ตัวอย่างเช่น ก่อนหน้านี้คุณได้เรียนรู้เกี่ยวกับคลาสและวิธีการ .NET ด้วยโมดูล 7Zip4PowerShell คำสั่งเพื่อแสดงรายการไฟล์ที่เก็บถาวรจะซับซ้อนน้อยลง

เรียกใช้คำสั่ง Get-7Zip ด้านล่างเพื่อแสดงรายการไฟล์ทั้งหมดภายในไฟล์ archive.zip (-ArchiveFileName .\archive.zip)

ด้วย 7Zip4PowerShell cmdlet Compress-7Zip มอบตัวเลือกเพิ่มเติมให้กับคุณสำหรับไฟล์เก็บถาวรประเภทต่างๆ เช่น Tar, GZip, BZip2, SevenZip, XZ และ Zip

คุณยังสามารถดูข้อมูลเกี่ยวกับไฟล์เก็บถาวรได้ด้วยการเรียกใช้คำสั่ง Get-7ZipInformation เช่น: Get-7ZipInformation -ArchiveFileName archive.zip คำสั่งแสดงรายการคุณสมบัติทั้งหมดของไฟล์ archive.zip

บทสรุป

ถึงตอนนี้ คุณได้เรียนรู้วิธีที่ PowerShell คลายซิปและบีบอัดไฟล์ด้วยคำสั่งในตัวและด้วยโมดูล 7Zip4PowerShell ความรู้ที่เพิ่งค้นพบนี้มีประโยชน์ไม่ว่าคุณจะลดขนาดไฟล์หรือเมื่อคุณส่งไฟล์จำนวนมากไปเป็นไฟล์เดียว แต่นั่นคือทั้งหมดที่ PowerShell มีให้ใช่ไหม

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

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