ใน Windows คุณสามารถ zip ไฟล์ได้
คลิกขวา→ ส่งไปยัง → บีบอัดโฟลเดอร์ (บีบอัด)
และเปิดเครื่องรูดโดยดับเบิลคลิกที่ .zip
ไฟล์และแตกไฟล์
มีวิธีการใช้ความสามารถเหล่านั้นจากสคริปต์ (ไฟล์. bat) โดยไม่จำเป็นต้องติดตั้งซอฟต์แวร์บุคคลที่สามหรือไม่
ใน Windows คุณสามารถ zip ไฟล์ได้
คลิกขวา→ ส่งไปยัง → บีบอัดโฟลเดอร์ (บีบอัด)
และเปิดเครื่องรูดโดยดับเบิลคลิกที่ .zip
ไฟล์และแตกไฟล์
มีวิธีการใช้ความสามารถเหล่านั้นจากสคริปต์ (ไฟล์. bat) โดยไม่จำเป็นต้องติดตั้งซอฟต์แวร์บุคคลที่สามหรือไม่
คำตอบ:
ย้อนกลับไปในปี 2013 ที่เป็นไปไม่ได้ Microsoft ไม่ได้ให้การปฏิบัติการใด ๆ สำหรับสิ่งนี้
ดูลิงค์นี้สำหรับวิธี VBS เพื่อทำสิ่งนี้ /superuser/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
หากต้องการขยายโซลูชัน PowerShell ของ Steven Penny คุณสามารถรวมมันไว้ในไฟล์แบตช์โดยเรียก powershell.exe ดังนี้:
powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', 'bar'); }"
ดังที่ Ivan Shilo กล่าวว่าสิ่งนี้จะไม่ทำงานกับ PowerShell 2 แต่ก็ต้องใช้ PowerShell 3 ขึ้นไปและ. NET Framework 4
'.'
เช่น:powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', '.'); }"
& {}
อะไร? ด้วยงาน PS5 นี้เช่นกัน:powershell.exe -nologo -noprofile -command "Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', '.');"
ณ. 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
ในทั้งสองกรณีทำหน้าที่เป็นไฟล์ซิปเพื่อบันทึกเป็นหรือเพื่อคลายซิป
หากคุณติดตั้ง Java คุณสามารถบีบอัดไปยังไฟล์เก็บถาวร ZIP โดยใช้jar
คำสั่ง:
jar -cMf targetArchive.zip sourceDirectory
c = สร้างไฟล์เก็บถาวรใหม่
M = ระบุว่าไม่ควรเพิ่มไฟล์รายการลงในไฟล์เก็บถาวร
f = ระบุชื่อไฟล์เป้าหมาย
จาก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
powershell Compress-Archive -Path C:\SomeFile.ext -DestinationPath C:\SomeFile.zip
จากบรรทัดคำสั่งโดยไม่จำเป็นต้องเขียนสคริปต์ (สมมติว่าคุณติดตั้ง Powershell v5 ซึ่งคุณสามารถกลับไปใช้ Windows 7 ได้)
ไม่ใช่ 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 , ขยาย , การใช้งานขั้นสูง MakeCab
ใช้ 7-Zip:
Zip : คุณมีโฟลเดอร์foo
และต้องการที่จะซิปไปmyzip.zip
"C:\Program Files\7-Zip\7z.exe" a -r myzip.zip -w foo -mem=AES256
Unzip : คุณต้องการคลายซิป ( myzip.zip
) ไปยังไดเรกทอรีปัจจุบัน ( ./
)
"C:\Program Files\7-Zip\7z.exe" x myzip.zip -o./ -y -r
without the need to install any 3rd party
ฉันได้รับการมองหาที่จะตอบคำถามที่แน่นอนนี้และจากการวิจัยของฉันการตอบสนองของ DiryBoy ดูเหมือนจะถูกต้อง
ฉันพบว่าโปรแกรม compact.exe บีบอัดไฟล์ แต่ไม่ควรสร้างไฟล์บีบอัดสูง (หรือชุดของไฟล์) มันคล้ายกับตัวเลือกที่คุณได้รับเมื่อคลิกขวาที่อักษรชื่อไดรฟ์หรือพาร์ติชันใน Windows คุณจะได้รับตัวเลือกในการล้างข้อมูล (ลบไฟล์ temp และอื่น ๆ ) รวมถึงการบีบอัดไฟล์ ไฟล์บีบอัดยังคงสามารถเข้าถึงได้ แต่ถูกบีบอัดเพื่อสร้างพื้นที่บนไดรฟ์ที่มีพื้นที่เหลือน้อย
ฉันพบว่า compress.exe ซึ่งฉันเคยมีในคอมพิวเตอร์ของฉันด้วย มันไม่ได้อยู่บนเครื่อง windows ส่วนใหญ่และเป็นส่วนหนึ่งของชุดทรัพยากร 2003 มันสร้างไฟล์ประเภทซิป แต่มันคล้ายกับไฟล์จาก windows setup disk (มีขีดล่างเป็นอักขระตัวสุดท้ายของนามสกุลไฟล์หรือชื่อ) และคำสั่ง extract.exe จะแตกไฟล์เหล่านั้น
อย่างไรก็ตามมนต์คือถ้ามันสามารถทำได้โดยกำเนิดผ่าน GUI ก็มีโอกาสที่จะทำมันผ่านชุด, .vbs หรือสคริปต์ประเภทอื่น ๆ ภายในบรรทัดคำสั่ง เนื่องจาก windows มีตัวเลือก 'ส่งไปยัง' เพื่อสร้างไฟล์ zip ฉันรู้ว่าต้องมีวิธีการทำผ่านทางบรรทัดคำสั่งและฉันพบตัวเลือกบางอย่าง
นี่คือลิงค์ที่ยอดเยี่ยมที่แสดงวิธีการซิปไฟล์โดยใช้คำสั่งดั้งเดิมของ windows
/superuser/110991/can-you-zip-a-file-from-the-command-prompt-using-only-windows-built-in-capabili
ฉันทดสอบด้วยไดเรกทอรีที่มีไฟล์และโฟลเดอร์ซ้อนกันหลายรายการและทำงานได้อย่างสมบูรณ์ เพียงทำตามรูปแบบของบรรทัดคำสั่ง
นอกจากนี้ยังมีวิธีการแตกไฟล์ผ่านทางบรรทัดคำสั่งที่ฉันพบเช่นกัน วิธีหนึ่งเพียงเปิดหน้าต่าง explorer เพื่อแสดงเนื้อหาของไฟล์ซิป บางส่วนยังใช้ Java ซึ่งไม่จำเป็นต้องเป็นภาษาพื้นเมืองของ windows แต่เป็นเรื่องธรรมดาที่เกือบจะดูเหมือน
/superuser/149489/does-windows-7-have-unzip-at-the-command-line-installed-by-default
คุณสามารถใช้สคริปต์ VBScript ในไฟล์ BAT รหัสนี้ทำงานบนเส้นทางสัมพัทธ์
ไม่จำเป็นต้องมีเครื่องมือหรือการอ้างอิงของบุคคลที่สามใด ๆ เพียงแค่ตั้งค่าและ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
หรือคุณสามารถ parametrize ไฟล์นี้โดยการเปลี่ยนสายCScript _zipup.vbs %SOURCEDIR% %OUTPUTZIP%
ด้วยซึ่งในกรณีนี้ก็สามารถที่จะเรียกว่าแม้ได้ง่ายขึ้นจากโดยเพียงแค่การเรียกร้องCScript _zipup.vbs %1 %2
CALL ZipUp C:\Source\Dir C:\Archive.zip
ฉันมีปัญหากับวิธีแก้ปัญหาทั้งหมดนี้
ไฟล์เหล่านี้ไม่เหมือนกันและพวกเขาทั้งหมดสร้างไฟล์ที่มีขนาดแตกต่างกันเล็กน้อยเมื่อเทียบกับRMB --> send to --> compressed (zipped) folder
เมื่อสร้างจากโฟลเดอร์ต้นทางเดียวกัน ความแตกต่างของขนาดที่ใกล้เคียงที่สุดที่ฉันมีคือความแตกต่าง 300 KB (สคริปต์> คู่มือ) ทำด้วย:
powershell Compress-Archive -Path C:\sourceFolder -CompressionLevel Fastest -DestinationPath C:\destinationArchive.zip
(หนังสือ-CompressionLevel . มีสามค่าที่เป็นไปได้ : เร็ว, NoCompression และเหมาะสมที่สุด (ค่าเริ่มต้น: ดีที่สุด))
ฉันต้องการสร้างไฟล์. bat ที่ควรบีบอัดโฟลเดอร์ปลั๊กอิน WordPress ที่ฉันกำลังทำงานโดยอัตโนมัติเป็นไฟล์เก็บถาวร. zip ดังนั้นฉันสามารถอัปโหลดไปยังเว็บไซต์ WordPress และทดสอบปลั๊กอินได้
แต่ด้วยเหตุผลบางอย่างมันไม่ทำงานกับการบีบอัดอัตโนมัติใด ๆแต่อย่างใดมันใช้งานได้กับการบีบอัดหยวนด้วยตนเองแม่มดฉันคิดว่าแปลกจริง ๆ
และไฟล์. zip ที่สร้างจากสคริปต์จะแตกปลั๊กอิน WordPress ไปยังจุดที่ไม่สามารถเปิดใช้งานได้และจะไม่สามารถลบออกจากภายใน WordPress ได้ ฉันต้อง SSH เป็น "ด้านหลัง" ของเซิร์ฟเวอร์และลบไฟล์ปลั๊กอินที่อัปโหลดด้วยตนเอง ในขณะที่ไฟล์ที่สร้างด้วยตนเอง RMB ทำงานตามปกติ
หากคุณต้องการทำสิ่งนี้เป็นส่วนหนึ่งของสคริปต์วิธีที่ดีที่สุดคือการใช้ Java สมมติว่าไดเรกทอรี bin อยู่ในเส้นทางของคุณ (ในกรณีส่วนใหญ่) คุณสามารถใช้บรรทัดคำสั่ง:
jar xf test.zip
หาก Java ไม่ได้อยู่ในเส้นทางของคุณอ้างอิงโดยตรง:
C:\Java\jdk1.6.0_03\bin>jar xf test.zip
โอเพ่นซอร์สคือเพื่อนของคุณ :-)
นี่คือunzip : http://gnuwin32.sourceforge.net/packages/unzip.htm
มีคำสั่ง ZIP เช่นกัน: http://gnuwin32.sourceforge.net/packages/zip.htm
การดาวน์โหลดไบนารีก็เพียงพอแล้ว
นี่เป็นเวอร์ชันที่ได้รับการอัปเดตสำหรับคำตอบของ @ PodTech.io
รุ่นนี้มีรหัส vbs ทั้งหมดที่ใช้ในแฟ้มแบตช์ได้อย่างถูกต้อง มันยังถูกสร้างเป็นรูทีนย่อยซึ่งสามารถเรียกด้วยบรรทัดเดียวจากที่ใดก็ได้ในสคริปต์ชุดงานของคุณ:
:: === Main code:
call :ZipUp "C:\Some\Path" "C:\Archive.zip"
:: === SubRoutines:
:ZipUp
::Arguments: Source_folder, destination_zip
(
echo:Set fso = CreateObject^("Scripting.FileSystemObject"^)
echo:InputFolder = fso.GetAbsolutePathName^(WScript.Arguments.Item^(0^)^)
echo:ZipFile = fso.GetAbsolutePathName^(WScript.Arguments.Item^(1^)^)
echo:
echo:' Create empty ZIP file.
echo:CreateObject^("Scripting.FileSystemObject"^).CreateTextFile^(ZipFile, True^).Write "PK" ^& Chr^(5^) ^& Chr^(6^) ^& String^(18, vbNullChar^)
echo:
echo:Set objShell = CreateObject^("Shell.Application"^)
echo:Set source = objShell.NameSpace^(InputFolder^).Items
echo:objShell.NameSpace^(ZipFile^).CopyHere^(source^)
echo:
echo:' Keep script waiting until compression is done
echo:Do Until objShell.NameSpace^( ZipFile ^).Items.Count = objShell.NameSpace^( InputFolder ^).Items.Count
echo: WScript.Sleep 200
echo:Loop
)>_zipup.vbs
CScript //Nologo _zipup.vbs "%~1" "%~2"
del _zipup.vbs
goto :eof
คุณบอกว่าคุณกำลังพยายามทำสิ่งนี้โดยไม่ใช้ซอฟต์แวร์ของบุคคลที่สาม ฉันไม่แน่ใจว่าคุณจะพิจารณาซอฟต์แวร์ "บุคคลที่สาม" ของ. NET หรือไม่
แต่คุณสามารถสร้างโปรแกรมอรรถประโยชน์บรรทัดคำสั่งของคุณเองใน. NET ไม่ควรใช้โค้ดเกินสองสามบรรทัด
การเพิ่มคำตอบและความคิดเห็นของ @Jason Duffett นี่เป็นสคริปต์ที่ได้รับอินพุตและเอาต์พุต (ชื่อไฟล์และชื่อไดเรกทอรีตามลำดับ) จากผู้ใช้:
@echo off
set input=%1
set output=%2
powershell.exe "Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('%input%', '%output%');"
การใช้งาน:
unzip.bat path\to\file.zip path\to\output\directory
หากต้องการ zip ไฟล์:
C:\> zip -9 -m -o file.dat.zip file.dat
คุณสามารถคลายบีบอัดไฟล์ซิปที่บีบอัดหรือเนทิฟโดยใช้คำสั่งExpandเช่น
expand MyFile.zip myFile
Expand file.zip file
เพียงแค่คัดลอกไฟล์ซิปไปยังไฟล์อื่นโดยไม่มีนามสกุล มันไม่ได้บีบอัด ZIP ลงในโฟลเดอร์