it-swarm.asia

كيف يمكنك الرمز البريدي أو فك الضغط من البرنامج النصي باستخدام إمكانيات Windows المدمجة فقط؟

في Windows ، يمكنك Zip بعض الملفات من خلال

انقر بزر الماوس الأيمن -> إرسال إلى -> مجلد مضغوط (مضغوط)

و unzip بالنقر المزدوج على ملف .Zip واستخراج الملفات.

هل هناك طريقة لتطبيق هذه القدرات من برنامج نصي (ملف .bat) دون الحاجة إلى تثبيت أي طرف ثالث ؟

253
Roee Gavirel

في عام 2013 ، لم يكن ذلك ممكنًا. قدمت MS لا قابل للتنفيذ لهذا الغرض.

انظر هذا الرابط لبعض طريقة VBS للقيام بذلك. https://superuser.com/questions/201371/create-Zip-folder-from-the-command-line-windows

من Windows 8 وما بعده ، يتم تثبيت .Net Framework 4.5 افتراضيًا ، مع System.IO.Compression.ZipArchive و PowerShell ، يمكن للمرء كتابة البرامج النصية لتحقيق ذلك ، راجع https://stackoverflow.com/a/26843122/71312

74
Diryboy

للتوسع في حل Steven Penny's PowerShell ، يمكنك دمجه في ملف دفعي عن طريق استدعاء powershell.exe مثل هذا:

powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.Zip', 'bar'); }"

كما قال إيفان شيلو ، لن ينجح هذا مع PowerShell 2 ، فهو يتطلب PowerShell 3 أو أحدث و .NET Framework 4.

163
Jason Duffett

اعتبارًا من .NET 4.5 ، يمكن لـ PowerShell القيام بذلك:

Add-Type -A System.IO.Compression.FileSystem
[IO.Compression.ZipFile]::CreateFromDirectory('foo', 'foo.Zip')
[IO.Compression.ZipFile]::ExtractToDirectory('foo.Zip', 'bar')

بالنسبة للسطرين الأخيرين ، يمكن استبدال bar و foo بالاسم الذي ترغب في أن يحتوي عليه المجلد ، أو اسم المجلد الموجود مسبقًا. foo.Zip في كلتا الحالتين يعمل كملف مضغوط إما للحفظ باسم أو لفك الضغط منه.

149
Steven Penny

إذا كان لديك Java مثبتة ، يمكنك الضغط على أرشيف Zip باستخدام jar command:

jar -cMf targetArchive.Zip sourceDirectory

ج = إنشاء ملف أرشيف جديد.

M = يحدد أنه لا ينبغي إضافة ملف بيان إلى الأرشيف.

f = يشير إلى اسم الملف الهدف.

120
Noam Manos

بوويرشيل 5.0

من Microsoft.PowerShell.Archive يمكنك استخدام:

على سبيل المثال:

  • قم بإنشاء result.Zip من مجلد Test بأكمله:

    Compress-Archive -Path C:\Test -DestinationPath C:\result
    
  • استخراج محتوى result.Zip في المجلد Test المحدد:

    Expand-Archive -Path result.Zip -DestinationPath C:\Test
    
59
ROMANIA_engineer

ليس بالضبط Zip ولكن الطريقة الوحيدة لضغط ملف باستخدام أدوات Windows هي:

makecab <source> <dest>.cab

لفك الضغط:

expand <source>.cab <dest>

مثال متقدم (من ss64.com):

Create a self extracting archive containing movie.mov:
C:\> makecab movie.mov "temp.cab"
C:\> copy /b "%windir%\system32\extrac32.exe"+"temp.cab" "movie.exe"
C:\> del /q /f "temp.cab"

مزيد من المعلومات: makecab ، expand ، makecab الاستخدامات المتقدمة

35
Federico Santamorena

باستخدام 7-Zip:

Zip : لديك مجلد foo ، وتريد أن Zip عليه إلى myzip.Zip

"C:\Program Files\7-Zip\7z.exe" a  -r myzip.Zip -w foo -mem=AES256

فك الضغط : تريد فك ضغطه (myzip.Zip) إلى الدليل الحالي (./)

"C:\Program Files\7-Zip\7z.exe" x  myzip.Zip  -o./ -y -r
27
Monir

لقد كنت أتطلع للإجابة على هذا السؤال الدقيق ومن خلال بحثي ، يبدو أن استجابة DiryBoy دقيقة.

لقد وجدت أن برنامج compress.exe يقوم بضغط الملفات ولكن ليس لإنشاء ملف مضغوط للغاية (أو مجموعة من الملفات). إنه مشابه للخيار الذي تحصل عليه عند النقر بزر الماوس الأيمن فوق حرف محرك أقراص أو قسم في Windows. يمكنك الحصول على خيار القيام بالتنظيف (إزالة ملفات temp ، إلخ) وكذلك ضغط الملفات. لا تزال الملفات المضغوطة قابلة للوصول ولكن يتم ضغطها فقط لإنشاء مساحة على محرك أقراص منخفض المساحة.

لقد عثرت أيضًا على compress.exe الذي حدث لي وجوده على جهاز الكمبيوتر الخاص بي. إنه ليس أصليًا على معظم أجهزة windows وهو جزء من مجموعة موارد 2003. إنه يصنع ملفًا مضغوطًا من نوع ما ، لكنه يشبه إلى حد كبير الملفات الموجودة على قرص إعداد Windows (يشتمل على الشرطة السفلية كحرف أخير من امتداد الملف أو اسمه). ويستخرج الأمر extract.exe تلك الملفات.

ومع ذلك ، فإن المانترا هي ، إذا كان يمكن القيام بها أصلاً عبر واجهة المستخدم الرسومية ، فمن المحتمل أن توجد طريقة للقيام بذلك عبر الدُفعات ، أو .vbs ، أو أي نوع آخر من النصوص في سطر الأوامر. نظرًا لأن windows لديه خيار "الإرسال إلى" لإنشاء ملف Zip ، فقد علمت أنه يجب أن تكون هناك طريقة للقيام بذلك عبر سطر الأوامر ووجدت بعض الخيارات.

فيما يلي رابط رائع يوضح كيفية ضغط ملف باستخدام أوامر Windows الأصلية.

https://superuser.com/questions/110991/can-you-Zip-a-file-from-the-command-Prompt-using-only-windows-built-in-capabili

لقد اختبرت ذلك مع دليل يحتوي على عدة ملفات ومجلدات متداخلة وعمل بشكل مثالي. فقط اتبع تنسيق سطر الأوامر.

هناك أيضًا طريقة لفك ضغط الملفات عبر سطر الأوامر الذي وجدته أيضًا. بإحدى الطرق ، يمكنك فقط فتح نافذة Explorer تعرض محتوى الملف المضغوط. يستخدم بعض هؤلاء أيضًا Java التي ليست بالضرورة أصلية للنوافذ ولكنها شائعة جدًا لدرجة أنها تبدو كذلك.

https://superuser.com/questions/149489/does-windows-7-have-unzip-at-the-command-line-installed-by-default

كيفية فك ضغط ملف باستخدام سطر الأوامر؟

8
LostUser

يمكنك استخدام vbsscript ملفوفة في ملف BAT. يعمل هذا الرمز على PATH نسبي.

لا حاجة لأية أدوات خارجية أو تبعيات. مجرد مجموعة SOURCEDIR و OUTPUTZIP.

اسم الملف: ZipUp.bat

echo Set fso = CreateObject("Scripting.FileSystemObject") > _zipup.vbs
echo InputFolder = fso.GetAbsolutePathName(WScript.Arguments.Item(0)) >> _zipup.vbs
echo ZipFile = fso.GetAbsolutePathName(WScript.Arguments.Item(1)) >> _zipup.vbs

'Create empty Zip file.
echo CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar) >> _zipup.vbs

echo Set objShell = CreateObject("Shell.Application") >> _zipup.vbs
echo Set source = objShell.NameSpace(InputFolder).Items >> _zipup.vbs
echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipup.vbs


echo 'Keep script waiting until compression is done
echo Do Until objShell.NameSpace( ZipFile ).Items.Count = objShell.NameSpace( InputFolder ).Items.Count >> _zipup.vbs
echo     WScript.Sleep 200 >> _zipup.vbs
echo Loop >> _zipup.vbs

CScript  _zipup.vbs  %SOURCEDIR%  %OUTPUTZIP%

del _zipup.vbs

مثال للاستخدام

SET SOURCEDIR=C:\Some\Path
SET OUTPUTZIP=C:\Archive.Zip
CALL ZipUp

بدلاً من ذلك ، يمكنك تحديد هذا الملف بشكل مسبق عن طريق استبدال السطر CScript _zipup.vbs %SOURCEDIR% %OUTPUTZIP% بـ CScript _zipup.vbs %1 %2 ، وفي هذه الحالة يمكن الاتصال به بسهولة أكبر من خلال الاتصال بـ CALL ZipUp C:\Source\Dir C:\Archive.Zip

6
PodTech.io

المصدر المفتوح هو صديقك :-)

هنا UNZIP: http://gnuwin32.sourceforge.net/packages/unzip.htm

يوجد أمر Zip أيضًا: http://gnuwin32.sourceforge.net/packages/Zip.htm

تحميل Binaries يكفي.

3
JanBorup

إذا كنت بحاجة إلى القيام بذلك كجزء من برنامج نصي ، فإن أفضل طريقة هي استخدام Java. على افتراض أن دليل bin في المسار الخاص بك (في معظم الحالات) ، يمكنك استخدام سطر الأوامر:

jar xf test.Zip

إذا لم يكن Java في إشارة المرور الخاصة بك مباشرةً:

C:\Java\jdk1.6.0_03\bin>jar xf test.Zip
2
eddyoc

أنت تقول إنك تحاول القيام بذلك بدون برنامج جهة خارجية. لست متأكدًا مما إذا كنت ستعتبر .NET برنامج "طرف ثالث".

ولكن يمكنك إنشاء الأداة المساعدة لسطر الأوامر الخاصة بك في .NET. لا ينبغي أن يتطلب أكثر من بضعة أسطر من التعليمات البرمجية.

https://msdn.Microsoft.com/en-us/library/system.io.compression.zipfile(v=vs.110).aspx

1
NL3294