سؤال كيفية ضغط / بفك الملفات في Powershell؟


هل هناك خط واحد يمكنه ضغط الملفات / فكها (* .zip) في PowerShell؟


103
2018-06-03 15:57


الأصل


ذات صلة: بفك مع PS في خادم الأساسية - Ruben Bartelink


الأجوبة:


DotNetZip سيسمح لك بالقيام بذلك من PowerShell. وهو ليس خطًا واحدًا ، ولكن ستسمح لك المكتبة بكتابة نص PowerShell الذي تحتاج إليه.

يمكنك أيضا استخدام واجهة COM ، انظر ضغط ملفات باستخدام Windows PowerShell ثم حزم أداة Windows Vista الشريط الجانبي.

غوغلينغ "zip powershell" أو "unzip powershell" قد يحضر أيضًا نتائج مفيدة.


21
2018-06-03 16:02



+1 المقالة المرتبطة بها مهام مفيدة بخلاف الإجابة الأكثر رواجًا - Ruben Bartelink
-1 لاقتراح بحث Google. هذه هي أعلى نتيجة StackExchange في بحث Google عن "unzip powershell" - machine yearning


هذه هي الطريقة التي يمكنك القيام بها بحتة من Powershell دون أي أدوات خارجية. هذا unzips ملف يسمى 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())

154
2017-11-14 01:36



استخدم $ destination.Copyhere ($ zip_file.items () ، 0x10) لاستبدال الملفات الموجودة. يخفي 0x4 مربع الحوار ثم يجمع 0x14 هذه ويحلل ويخفي مربع الحوار. - Peter
الخط $destination.Copyhere($zip_file.items()) يفعل فعلية unziping. - Jonathan Allen
يمكنك تجميع ما سبق في وظيفة ، إذا كنت تريد: 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()) } - James Holwell
يجب أن يكون هذا هو الجواب المقبول. - tugberk
يفشل هذا بالنسبة لي عندما يحتوي ملف zip على مجلد فقط (العناصر فارغة) - James Woolfenden


الآن في .NET Framework 4.5 ، هناك ملف مضغوط فئة يمكنك استخدامها على النحو التالي:

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

56
2017-12-30 17:46



هذا قطعا عملت - استخدمتها لاستخراج أكثر من 400 ملف مضغوط. سأقوم بالتأكد من عدم وجود 4.5 هنا ، لكن لا تظهر تحت Microsoft.NET. - GalacticCowboy
هذه سيكون تكون كبيرة إذا كان هناك طريقة بسيطة ل ExtractToDirectory وخيار الكتابة فوق كافة الملفات الموجودة. - James Dunne
قم بتحميل التجميع باستخدام Add-Type ، على سبيل المثال: Add-Type -AssemblyName System.IO.Compression.FileSystem - Mike
JamesDunne - إذا لم يكن لديك ملفات أخرى تحتاج إلى حفظها ، فيمكنك استخدام "Remove-Item -Recurse $ TargetFolder". خلاف ذلك ، ما يمكن القيام به يمكن القيام به ، لكنه سيكون غير تافه. ستحتاج إلى فتح الرمز البريدي للقراءة ، ثم المشي في الرمز البريدي ، وحذف أي كائن هدف سابق وتفريغ الكائن الجديد. محظوظ بالنسبة لي ، يعمل الحل السهل. ؛) - Mike
كن حذرًا من استخدام مواقع الملفات النسبية .شبكة الدليل الحالي، ليس PowerShell واحد. نرى هنا. من الأفضل ربما فقط (Resolve-Path $someDir).Path الحجج. - jpmc26


قد ترغب في التحقق من امتدادات مجتمع PowerShell (PSCX) والتي لديها أوامر cmdlets خصيصا لهذا الغرض.


18
2018-06-03 15:59



+1 PSCX هي مجموعة كبيرة من أوامر cmdlet الإضافية - أنا فقط أتمنى أن أتمكن من اختيار أكثر من تلك التي أريدها والتي لا أريدها. يبدو أن تغيير الكثير في مثيل Powershell بلدي .... - marc_s
لقد صادفت هذا لأنني أريد فعلاً أتمتة تثبيت PSCX إذا استطعت لبعض الزملاء. نحاول الآن أن نرى أي نوع من المشكلات التي واجهتها - jcolebrand


أعلم أن هذا سؤال قديم جدًا ، لكنني رأيته مرتبطًا بالتويتر فقط على أنه يمكنني نشر رد حالي.

PowerShell 5 ، متوفر حاليًا على نظام التشغيل Windows 10 أو عبر ويندوز الاطار 5 معاينة الانتاج، يأتي مع اثنين من أوامر cmdlets المضمنة من أجل "الضغط" و "إلغاء ضغط":


14
2017-10-17 20:59



إنها حسن شيء لتقديم معلومات جديدة على الأسئلة القديمة. ؛) +1 - jpmc26


أجد أبسط حل فقط لاستخدام الثنائيات 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.

سيكون من المتعذر وضع غلاف حول محولات النص ولكن في الواقع لا أحتاج لذلك لذا لم أزعجني.

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


5
2017-08-03 19:40





أحب أيضا معلومات-ZIP (العثور على محرك Zip في معظم المرافق البريدي الأخرى) و 7 زيب، وهو مفضل آخر لديه كل من واجهة المستخدم الرسومية والرمز البريدي المرافق. النقطة الموجودة ، هناك بعض الأدوات المساعدة الجيدة لسطر الأوامر التي ستعمل مع معظم مهام PowerShell.

هناك بعض الحيل لتشغيل الأدوات المساعدة لسطر الأوامر التي لم يتم بناؤها باستخدام PowerShell:

  • تشغيل ملف قابل للتنفيذ يبدأ برقم في الاسم ، قم بملئه بعلامة العطف (&).

    و7zip.exe

  • التفاف كل رمز مميز ، يتوقع الأداة أن نرى من سطر الأوامر ، في علامات الاقتباس.

    & "c: \ path with space \ SomeCommand.exe" "/ parameter2" "/ parameter2" "parameter2's Value" "Value2` "with a quote"

جرب هذا:

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

او حتى:

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

5
2017-08-11 15:07





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

2
2017-10-11 17:56





ينرر يمكن أن تعمل في وضع CMD قبول الحجج


0
2017-08-03 19:49





النهج الأيوني الصخور:

https://dotnetzip.codeplex.com/wikipage؟title=PS-Examples

يدعم كلمات المرور وأساليب التشفير الأخرى ، إلخ.


0
2018-01-13 22:53