Powershell में zip / unzip फाइल कैसे करें?


जवाबों:


21

DotNetZip आपको PowerShell से ऐसा करने की अनुमति देगा। यह एक-लाइनर नहीं है, लेकिन लाइब्रेरी आपको पॉवरशेल स्क्रिप्ट लिखने की अनुमति देगा जो आपको चाहिए।

आप COM इंटरफ़ेस का उपयोग भी कर सकते हैं, Windows PowerShell के साथ कंप्रेस फ़ाइलें देखें और फिर Windows Vista साइडबार गैजेट को पैकेज करें

"ज़िप पॉशशेल" या "अनजिप पॉवरशेल" को गुगली करने से भी उपयोगी परिणाम सामने आ सकते हैं।


+1 लिंक किए गए लेख में सबसे अधिक उत्तर दिए गए उत्तर के विपरीत उपयोगी कार्य हैं
रुबेन बार्टेलिंक

5
-1 Google खोज का सुझाव देने के लिए। यह "अनज़िप पॉवरशेल" के लिए Google खोज में शीर्ष StackExchange परिणाम है
मशीन

154

यह है कि आप इसे बिना किसी बाहरी उपकरण के पॉवर्स से शुद्ध रूप से कैसे कर सकते हैं। यह वर्तमान कार्यशील निर्देशिका पर 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())

26
मौजूदा फ़ाइलों को अधिलेखित करने के लिए $ डेस्टीनेशन का उपयोग करें। 0x4 संवाद बॉक्स छुपाता है, और 0x14 इन और ओवरराइट को जोड़ता है और संवाद छुपाता है।
पीटर

3
लाइन $destination.Copyhere($zip_file.items())वास्तविक अनज़िपिंग करती है।
जोनाथन एलन

2
यदि आप चाहते हैं, तो आप उपरोक्त कार्य को पार्सल कर सकते हैं: 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()) }
जेम्स हॉलवेल

6
यह स्वीकृत उत्तर होना चाहिए।
tugberk

2
यह मेरे लिए तब विफल हो जाता है जब ज़िप फ़ाइल में सिर्फ एक फ़ोल्डर होता है (आइटम खाली होता है)
जेम्स वुल्फेंडेन

56

अब .NET फ्रेमवर्क 4.5 में, एक ZipFile वर्ग है जिसे आप इस तरह से उपयोग कर सकते हैं:

[System.Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')
[System.IO.Compression.ZipFile]::ExtractToDirectory($sourceFile, $targetFolder)

1
यह बहुत अच्छा होगा अगर कोई सरल तरीका एक्सट्रैक्टडायरेक्टरी हो और सभी मौजूदा फाइलों को अधिलेखित करने का विकल्प हो।
जेम्स ड्यूने

1
यह .NET 4.5 के साथ काम करता है। हालाँकि आपको Powershell V3 की भी आवश्यकता है।
दालसॉफ्ट

3
उदाहरण के लिए, ऐड-टाइप के साथ असेंबली को लोड करें: ऐड-टाइप- AssemblyName System.IO.Compression.FileSystem
माइक

2
@JamesDunne - यदि आपके पास अन्य फाइलें नहीं हैं जिन्हें आपको संरक्षित करने की आवश्यकता है, तो 'Remove-Item -Recurse $ TargetFolder' का उपयोग कर सकते हैं। अन्यथा, आप जो चाहते हैं वह किया जा सकता है, लेकिन यह गैर-तुच्छ होगा। आपको पढ़ने के लिए ज़िप खोलने की आवश्यकता होगी, और फिर किसी भी पिछले लक्ष्य ऑब्जेक्ट को हटाने और नए को अनपैक करते हुए ज़िप को चलना होगा। मेरे लिए भाग्यशाली, आसान समाधान काम करता है। ;)
माइक

3
चेतावनी दें कि संबंधित फ़ाइल स्थान .NET वर्तमान निर्देशिका का उपयोग करेंगे , कि PowerShell एक का। देखें यहाँ । यह सिर्फ (Resolve-Path $someDir).Pathतर्कों के लिए बेहतर है।
jpmc26

18

आप विशेष रूप से इसके लिए cmdlets वाले PowerShell सामुदायिक एक्सटेंशन (PSCX) की जांच करना चाह सकते हैं ।


1
+1 PSCX ऐड-ऑन cmdlets का एक शानदार सेट है - मैं बस इच्छा करता हूं कि मैं चुन सकता हूं और अधिक चुन सकता हूं जो मुझे चाहिए और जो मुझे नहीं चाहिए। यह मेरे पॉवर्सशेल उदाहरण में बहुत कुछ बदल रहा है ....
marc_s

मैं इस पर आया हूं क्योंकि मैं वास्तव में PSCX इंस्टॉलेशन को स्वचालित करना चाहता हूं यदि मैं कुछ सहकर्मियों के लिए कर सकता हूं। यह देखने की कोशिश कर रहा हूं कि मैं किस तरह के मुद्दों पर चलता हूं
jcolebrand

16

मुझे पता है कि यह एक बहुत पुराना सवाल है, लेकिन मैंने अभी इसे ट्विटर पर जुड़ा हुआ देखा है कि मैं एक वर्तमान उत्तर दूंगा।

PowerShell 5, जो वर्तमान में विंडोज 10 पर या विंडोज मैनेजमेंट फ्रेमवर्क 5 प्रोडक्शन प्रीव्यू के माध्यम से उपलब्ध है , 'जिपिंग' और 'अनजिपिंग' के लिए दो बिल्ट-इन cmdlets के साथ आता है:


3
यह एक है अच्छा पुराने सवाल नई जानकारी प्रदान करने के लिए बात। ;) +1
jpmc26

5

मुझे बस इंज़ीज़ बायनेरी का उपयोग करने का सबसे सरल समाधान मिल गया है जो मैंने वर्षों से उपयोग किया है और एक यूनिक्स वातावरण में उपयोग करता है।

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.

यह पाठ आउटपुट के चारों ओर एक पॉलीशेल रैपर लगाने के लिए स्पष्ट होगा, लेकिन व्यवहार में मुझे कभी भी इसकी आवश्यकता नहीं है कि मैंने परेशान नहीं किया है।

http://www.info-zip.org/


5

मुझे इन्फो- जिप (ज्यादातर जिप उपयोगिताओं में पाया जाने वाला जिप इंजन) और 7-जिप , एक और पसंदीदा है, जिसमें एक जीयूआई और कमांड लाइन जिप उपयोगिता दोनों हैं। इस बिंदु पर, कुछ अच्छे कमांड-लाइन उपयोगिताओं हैं जो अधिकांश पॉवरशेल कार्यों के लिए काम करेंगे।

कमांड लाइन उपयोगिताओं को चलाने के लिए कुछ तरकीबें हैं जो पॉवरशेल को ध्यान में रखकर नहीं बनाई गई थीं:

  • एक निष्पादन योग्य जो नाम में एक संख्या से शुरू होता है, उसे एक एम्परसैंड (&) के साथ प्रस्तुत करना।

    और 7zip.exe

  • प्रत्येक टोकन को लपेटें, उपयोगिता कमांड लाइन से उद्धरणों में देखने की उम्मीद कर रही है।

    & "c: \ path with space \ SomeCommand.exe" "/ पैरामीटर 2" "/ पैरामीटर 2" "पैरामीटर 2 का मान" "Value2` "एक उद्धरण के साथ"

इसे इस्तेमाल करे:

zip filename.zip (Get-ChildItem somepath\*)

या और भी:

zip filename.zip (Get-Content ListOfFiles.txt)

2

जेम्स होवेल मुझे आपका उत्तर पसंद है लेकिन मैंने इसे थोड़ा विस्तार दिया है

# 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()) 
}

0

WinRAR तर्कों को स्वीकार करते हुए CMD मोड में काम कर सकता है



0

मैंने एक PowerShell 2.0 संगत मॉड्यूल बनाया है, जो समकालिक तरीके से फ़ाइलों को ज़िप और अनज़िप करने के लिए देशी विंडोज ओएस कमांड का उपयोग करता है। यह विंडोज़ एक्सपी की तरह पुराने ओएस पर काम करता है, और इसके लिए .Net 4.5 या किसी अन्य बाहरी टूल की आवश्यकता नहीं होती है। कार्य भी स्क्रिप्ट निष्पादन को ब्लॉक करेगा जब तक कि फ़ाइलों को सभी ज़िपित / अनज़िप नहीं किया गया हो। आप मेरे ब्लॉग पर अधिक जानकारी और मॉड्यूल पा सकते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.