มีหนึ่งซับในที่จะ zip / unzip ไฟล์ (* .zip) ใน PowerShell หรือไม่
มีหนึ่งซับในที่จะ zip / unzip ไฟล์ (* .zip) ใน PowerShell หรือไม่
คำตอบ:
DotNetZipจะอนุญาตให้คุณทำสิ่งนี้จาก PowerShell ไม่ใช่ซับเดียว แต่ไลบรารี่จะอนุญาตให้คุณเขียนสคริปต์ PowerShell ที่คุณต้องการ
นอกจากนี้คุณยังสามารถใช้อินเตอร์เฟซ COM ให้ดูไฟล์บีบอัดด้วย Windows PowerShell แล้วแพ็คเกจ Vista Gadget
Googling "zip powershell" หรือ "unzip powershell" อาจทำให้เกิดผลลัพธ์ที่มีประโยชน์
นี่คือวิธีที่คุณสามารถทำได้อย่างหมดจดจาก Powershell โดยไม่มีเครื่องมือภายนอก ซึ่งทำการคลายซิปไฟล์ที่เรียกว่า test.zip ไปยังไดเรกทอรีการทำงานปัจจุบัน:
$shell_app=new-object -com shell.application
$filename = "test.zip"
$zip_file = $shell_app.namespace((Get-Location).Path + "\$filename")
$destination = $shell_app.namespace((Get-Location).Path)
$destination.Copyhere($zip_file.items())
$destination.Copyhere($zip_file.items())
ทำการเปิดเครื่องรูดจริง
function unzip($filename) { if (!(test-path $filename)) { throw "$filename does not exist" } $shell = new-object -com shell.application $shell.namespace($pwd.path).copyhere($shell.namespace((join-path $pwd $filename)).items()) }
ตอนนี้ใน. NET Framework 4.5 มีคลาสZipFileที่คุณสามารถใช้ดังนี้
[System.Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')
[System.IO.Compression.ZipFile]::ExtractToDirectory($sourceFile, $targetFolder)
(Resolve-Path $someDir).Path
ข้อโต้แย้ง
คุณอาจต้องการตรวจสอบส่วนขยายชุมชน PowerShell (PSCX)ซึ่งมี cmdlets เฉพาะสำหรับสิ่งนี้
ฉันรู้ว่านี่เป็นคำถามที่เก่ามาก แต่ฉันเพิ่งเห็นมันเชื่อมโยงบน Twitter เมื่อคิดว่าฉันจะโพสต์คำตอบปัจจุบัน
PowerShell 5 ซึ่งมีให้บริการบน Windows 10 หรือผ่านทางWindows Management Framework 5 Production Previewมาพร้อมกับ cmdlet ในตัวสองตัวสำหรับ 'zipping' และ 'unzipping':
ฉันพบทางออกที่ง่ายที่สุดเพียงแค่ใช้ไบนารี infozip ที่ฉันใช้มานานหลายปีและใช้ในสภาพแวดล้อม UNIX
PS> zip -9r ../test.zip *
PS> cd ..
PS> unzip -t test.zip Archive: test.zip
testing: LinqRepository/ OK
testing: LinqRepository/ApplicationService.cs OK
testing: LinqRepository/bin/ OK
...
No errors detected in compressed data of test.zip.
มันจะตรงไปตรงมาที่จะใส่เสื้อคลุมทรงพลังรอบ ๆ ข้อความ แต่ในทางปฏิบัติฉันไม่เคยต้องการมันเลยไม่ได้ใส่ใจ
ฉันยังชอบInfo-ZIP (เอ็นจิ้น Zip ที่พบในยูทิลิตี้ Zip อื่น ๆ ) และ7-Zipซึ่งเป็นรายการโปรดอีกรายการหนึ่งที่มีทั้งยูทิลิตี้ GUI และบรรทัดคำสั่ง Zip ประเด็นก็คือมียูทิลิตีบรรทัดคำสั่งที่ดีที่จะใช้กับงาน PowerShell ส่วนใหญ่
มีเทคนิคบางประการในการเรียกใช้โปรแกรมอรรถประโยชน์บรรทัดคำสั่งที่ไม่ได้สร้างขึ้นด้วย PowerShell:
การเรียกใช้โปรแกรมเรียกทำงานที่เริ่มต้นด้วยตัวเลขในชื่อนำหน้าด้วยเครื่องหมายและ (&)
และ 7zip.exe
ล้อมแต่ละโทเค็นยูทิลิตีคาดว่าจะเห็นจากบรรทัดคำสั่งในเครื่องหมายคำพูด
& "c: \ path พร้อมช่องว่าง \ SomeCommand.exe" "/ parameter2" "/ parameter2" "ค่าพารามิเตอร์ของ parameter2" "Value2` "พร้อมเครื่องหมายคำพูด"
ลองสิ่งนี้:
zip filename.zip (Get-ChildItem somepath\*)
หรือแม้กระทั่ง:
zip filename.zip (Get-Content ListOfFiles.txt)
James Holwell ฉันชอบคำตอบของคุณ แต่ฉันขยายออกไปเล็กน้อย
# Example
#unzip "myZip.zip" "C:\Users\me\Desktop" "c:\mylocation"
function unzip($fileName, $sourcePath, $destinationPath)
{
$shell = new-object -com shell.application
if (!(Test-Path "$sourcePath\$fileName"))
{
throw "$sourcePath\$fileName does not exist"
}
New-Item -ItemType Directory -Force -Path $destinationPath -WarningAction SilentlyContinue
$shell.namespace($destinationPath).copyhere($shell.namespace("$sourcePath\$fileName").items())
}
WinRARสามารถทำงานในโหมด CMD ที่รับอาร์กิวเมนต์
หินอิออนเข้าใกล้:
https://dotnetzip.codeplex.com/wikipage?title=PS-Examples
รองรับรหัสผ่านวิธีการเข้ารหัสอื่น ๆ ฯลฯ
ฉันได้สร้างโมดูลที่เข้ากันได้กับ PowerShell 2.0 ซึ่งใช้คำสั่งดั้งเดิมของระบบปฏิบัติการ Windows เพื่อ zip และคลายซิปไฟล์ในลักษณะซิงโครนัส สิ่งนี้ใช้ได้กับ OS ที่เก่ากว่าเช่น Windows XP และไม่จำเป็นต้องใช้. Net 4.5 หรือเครื่องมือภายนอกอื่น ๆ ฟังก์ชั่นนี้จะบล็อกการประมวลผลสคริปต์จนกว่าไฟล์ทั้งหมดจะได้รับการซิป / คลายซิป ท่านสามารถหาข้อมูลเพิ่มเติมและโมดูลในบล็อกของฉันที่นี่