คุณจะซิปหรือคลายซิปของสคริปต์โดยใช้ความสามารถในตัวของ Windows เท่านั้นได้อย่างไร


294

ใน Windows คุณสามารถ zip ไฟล์ได้

คลิกขวา→ ส่งไปยังบีบอัดโฟลเดอร์ (บีบอัด)

และเปิดเครื่องรูดโดยดับเบิลคลิกที่ .zipไฟล์และแตกไฟล์

มีวิธีการใช้ความสามารถเหล่านั้นจากสคริปต์ (ไฟล์. bat) โดยไม่จำเป็นต้องติดตั้งซอฟต์แวร์บุคคลที่สามหรือไม่



16
อาจเป็นไปได้ที่จะเรียกจากไฟล์แบตช์หรือโปรแกรม (นั่นคือสาเหตุที่ฉันมาที่นี่ - พยายามสร้างไฟล์. BAT ที่รวดเร็วเพื่อ "สร้าง" ผลิตภัณฑ์เล็ก ๆ สำหรับเว็บไซต์ที่ต้องการให้เป็นไฟล์ zip)
Jon Coombs

46
เสียสติว่าคำถามนี้ถูกปิด
Sam Goldberg

1
เป็นไปได้ไหมที่จะย้ายคำถามนี้ไปที่ Super User?
Hanxue

21
ยังมีประโยชน์มากและเกี่ยวข้องในปี 2018: P
Michael Fever

คำตอบ:


82

ย้อนกลับไปในปี 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


1
สิ่งนี้ไม่ถูกต้องเนื่องจาก PS อนุญาตสิ่งนี้และได้รับการติดตั้งล่วงหน้าบน Windows และสามารถใช้ได้ผ่านทางบรรทัดคำสั่ง
Dan Atkinson

4
@DanAtkinson อัปเดตแล้ว มันได้รับคำตอบกลับในปี 2013 การเชื่อมโยงให้ VBS บางวิธี วิธี PS ต้องการ. Net 4.5 ซึ่งต้องการ Windows 8 ขึ้นไป
Diryboy

ขอบคุณสำหรับการอัพเดท! ได้แก้ไขการลงคะแนนของฉันแล้ว :)
Dan Atkinson

6
@MichaelMrozek "command line" หมายถึงบรรทัดคำสั่งใด ๆ โดยเฉพาะไม่เฉพาะ CMD / คำสั่งและ PS แน่นอนเป็นบรรทัดคำสั่งเช่นทุบตี, sh, rsh บน * ระวัง แต่จะไปอีกหนึ่งเนื่องจากคุณสามารถเรียกใช้ PowerShell จากบรรทัดคำสั่งมันจะตอบคำถามแม้ว่าคุณต้องการที่จะเชื่อว่าคำสั่ง cmd / เป็นบรรทัดคำสั่งเดียวและอย่างเดียว
Robert McKee

1
มันเป็นไปได้ในปี 2013 (โดยไม่ต้องติดตั้งซอฟต์แวร์เพิ่มเติม) ดูคำถามผู้ใช้ขั้นสูง มันมีความเป็นไปได้ตั้งแต่Windows XPออกมาในปี 2001 ในตัวฟังก์ชันการทำงานที่ไปรษณีย์ใน Windows XP สามารถ leveraged เพราะมันถูกเปิดเผยผ่านเฟซ COM
Peter Mortensen

180

หากต้องการขยายโซลูชัน 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


1
ที่จริงแล้วมีให้ใน. NET 4.5
qJake

10
สำหรับผู้ที่ (เช่นฉัน) ที่สงสัยว่าจะแยกไปยังไดเรกทอรีจริงได้อย่างไร (แทนที่จะสร้างไดเรกทอรีใหม่) เพียงแค่ตั้งค่าพารามิเตอร์เป้าหมายเป็น'.'เช่น:powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', '.'); }"
Munchkin

เราสามารถใช้คำสั่งเหล่านี้เพื่อเพิ่มการบีบอัดได้ไหม? ชอบทำให้การบีบอัดแบบ Ultra ลดขนาดไฟล์หรือไม่
ไนเจล Fds

1
มีจุดประสงค์& {}อะไร? ด้วยงาน PS5 นี้เช่นกัน:powershell.exe -nologo -noprofile -command "Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', '.');"
Roi Danton

@RoiDanton วิธีการใช้ stringformatter สำหรับการกำหนด src.zip และ dest.zip?
PySaad

161

. 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ในทั้งสองกรณีทำหน้าที่เป็นไฟล์ซิปเพื่อบันทึกเป็นหรือเพื่อคลายซิป


17
นี่คือ ณ . NET 4.5
qJake

เราสามารถใช้คำสั่งเหล่านี้เพื่อเพิ่มการบีบอัดได้ไหม? ชอบทำให้การบีบอัดแบบ Ultra ลดขนาดไฟล์หรือไม่
ไนเจล Fds

ฉันมี. NET v4.0.30319, v2.0.50727, v1.1.4322, v1.0.3705 ติดตั้งผ่านทาง VM ที่ติดตั้งจากที่นี่: developer.microsoft.com/en-us/microsoft-edge/tools/vmsและทำงานได้ ดังนั้นฉันเดาว่าคุณไม่ต้องการ. NET 4.5
alpha_989

นี่เป็นวิธีการแก้ปัญหาที่ใช้งานได้จริงในระบบที่ทันสมัยซึ่งจะเขียนขนาดซิปเกิน 2GB ในขณะที่ Powershell มาตรฐาน "Compress-Archive" จะล้มเหลว
Shukri Adams

135

หากคุณติดตั้ง Java คุณสามารถบีบอัดไปยังไฟล์เก็บถาวร ZIP โดยใช้jarคำสั่ง:

jar -cMf targetArchive.zip sourceDirectory

c = สร้างไฟล์เก็บถาวรใหม่

M = ระบุว่าไม่ควรเพิ่มไฟล์รายการลงในไฟล์เก็บถาวร

f = ระบุชื่อไฟล์เป้าหมาย


3
ยอดเยี่ยมขอบคุณสิ่งที่ฉันกำลังมองหา ... FYI - ฉันต้องลบเครื่องหมายลบใน DOS ... เช่น jar cMf target.zip sourceDir
mlo55

3
ไม่เลว แต่คุณต้องติดตั้ง JDK ไม่ใช่ JRE
pdem

2
Nice หนึ่งอาจแก้ปัญหาแพลตฟอร์มอิสระมากที่สุดสำหรับการนี้;)
Adrian

YMMD ความคิดที่น่ากลัว ช่วยฉันได้มากเวลา
gorefest

3
สิ่งนี้ครอบคลุมโดย"... โดยใช้ความสามารถในตัวของ Windows เท่านั้น " (ความสำคัญของฉัน)
Peter Mortensen

84

PowerShell 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
    

13
มันใช้งานได้ดีขอบคุณ สำหรับทุกคนที่สิ้นสุดที่นี่คุณสามารถใช้งานได้powershell Compress-Archive -Path C:\SomeFile.ext -DestinationPath C:\SomeFile.zipจากบรรทัดคำสั่งโดยไม่จำเป็นต้องเขียนสคริปต์ (สมมติว่าคุณติดตั้ง Powershell v5 ซึ่งคุณสามารถกลับไปใช้ Windows 7 ได้)
Beems

ใช้งานได้ดีเพิ่มตัวเลือก - บังคับหากคุณกำลังวางแผนที่จะรันซ้ำ
Robin Salih

1
@ ดูเหมือนว่าขอบคุณ! แต่ฉันคิดว่าคุณบ้าเส้นทาง / ปลายทางในทางตรงกันข้าม
Yiping

วิธีนี้ใช้งานได้ แต่ไฟล์บีบอัดจะถูกบีบอัดแตกต่างกันไปแล้วจะเกิดอะไรขึ้นถ้าคุณใช้ windows explorer "ส่งไปที่ -> โฟลเดอร์บีบอัด (บีบอัด)" รุ่น PowerShell ใหญ่กว่าและบางโปรแกรมไม่สามารถแตกไฟล์ได้
Eric Labashosky

บีบอัดไฟล์เก็บถาวรมีขีด จำกัด ไฟล์สูงสุด 2GB ในไฟล์อินพุต
Sergei Rodionov

37

ไม่ใช่ 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


ไม่มันไม่ได้เป็นวิธีเดียวที่จะบีบอัดไฟล์โดยใช้เครื่องมือของ Windows
Peter Mortensen

34

ใช้ 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

31
โปรดสังเกตคำถาม:without the need to install any 3rd party
Roee Gavirel

16
@RoeeGavirel 7zip ควรเป็นหนึ่งในสิ่งแรกที่คุณติดตั้งในการติดตั้ง Windows แม้ว่า: P
developerbmw

3
@developerbmw - A.why มันคืออะไร? B. ฉันกำลังจัดการเครื่องจักรประมาณ 100 เครื่องซึ่งไม่มี 7zip อยู่ ในการติดตั้งที่ฉันจะต้องได้รับ DevOps ติดตั้งในเครื่องเหล่านั้นและในเครื่องใหม่ทั้งหมดที่จะถูกเพิ่มเข้าไปในกลุ่ม ฉันอยากจะหลีกเลี่ยง
Roee Gavirel

1
@Roland: คุณจะได้โปรดเป็นแปซิฟิก; มันผิดพลาดที่ไหน? ที่จะช่วยให้ทุกคน
Monir

1
@Roland: เพียงแค่ตรวจสอบว่าไวยากรณ์ทำงานได้ดี อาจเป็นไปได้ว่าคุณกำลังลองกับโฟลเดอร์ "foo" ซึ่งไม่ปรากฏในเครื่องของคุณ ลองเดาดูสิ
Monir

9

ฉันได้รับการมองหาที่จะตอบคำถามที่แน่นอนนี้และจากการวิจัยของฉันการตอบสนองของ 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

วิธีการแตกไฟล์โดยใช้บรรทัดคำสั่ง?



8

คุณสามารถใช้สคริปต์ VBScript ในไฟล์ BAT รหัสนี้ทำงานบนเส้นทางสัมพัทธ์

ไม่จำเป็นต้องมีเครื่องมือหรือการอ้างอิงของบุคคลที่สามใด ๆ เพียงแค่ตั้งค่าและSOURCEDIROUTPUTZIP

ชื่อไฟล์: 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 %2CALL ZipUp C:\Source\Dir C:\Archive.zip


บรรทัดที่สร้างไฟล์ zip เริ่มต้นจะต้องมีการหลีกเลี่ยงมิฉะนั้นจะไม่สิ้นสุดในสคริปต์
ถ้วย

ใช่นี่คือวิธีที่จะไป (เช่นในคำถามผู้ใช้ขั้นสูง )
Peter Mortensen

ฉันเพิ่มเวอร์ชันคำตอบที่ถูกต้อง
fsteff

5

ฉันมีปัญหากับวิธีแก้ปัญหาทั้งหมดนี้

ไฟล์เหล่านี้ไม่เหมือนกันและพวกเขาทั้งหมดสร้างไฟล์ที่มีขนาดแตกต่างกันเล็กน้อยเมื่อเทียบกับ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 ทำงานตามปกติ


คืออะไร"WBR"และ"หยวน" ?
ปีเตอร์มอร์เทนเซ่น

RMB = ปุ่มเมาส์ขวา <wbr> = แท็ก HTML ที่ระบุว่า "Word BReak โอกาส" กับเบราว์เซอร์ (ลบออกเนื่องจากไม่ได้ทำงาน)
เซบาสเตียนนอร์

4

หากคุณต้องการทำสิ่งนี้เป็นส่วนหนึ่งของสคริปต์วิธีที่ดีที่สุดคือการใช้ Java สมมติว่าไดเรกทอรี bin อยู่ในเส้นทางของคุณ (ในกรณีส่วนใหญ่) คุณสามารถใช้บรรทัดคำสั่ง:

jar xf test.zip

หาก Java ไม่ได้อยู่ในเส้นทางของคุณอ้างอิงโดยตรง:

C:\Java\jdk1.6.0_03\bin>jar xf test.zip

3

โอเพ่นซอร์สคือเพื่อนของคุณ :-)

นี่คือunzip : http://gnuwin32.sourceforge.net/packages/unzip.htm

มีคำสั่ง ZIP เช่นกัน: http://gnuwin32.sourceforge.net/packages/zip.htm

การดาวน์โหลดไบนารีก็เพียงพอแล้ว


ใน Windows 8 จะเกิดข้อผิดพลาด: bzip2.dll หายไป
Doug

1
@Doug มันบอกว่า bzip2 ที่เป็นความต้องการบนหน้าเว็บและมีการเชื่อมโยงไปยังการดาวน์โหลด
แซม

11
คำถามเดิมคือวิธีการใช้คำสั่ง Windows ในตัวมาตรฐาน นอกจากนี้การกำหนดให้ผู้ใช้ของคุณติดตั้งโซลูชันของบุคคลที่สามต่าง ๆ เป็นสิ่งที่ไม่พึงประสงค์เนื่องจากเครื่องมือหรือโซลูชันของคุณเองนั้น จำกัด เฉพาะผู้ใช้ที่มีสิทธิ์ระดับผู้ดูแลระบบในคอมพิวเตอร์ของพวกเขาหรือผู้ที่ไม่สนใจเกี่ยวกับ . โอเพ่นซอร์สอาจเป็นเพื่อนของคุณ แต่แพ็คเกจโอเพ่นซอร์สที่ต้องการให้คุณติดตั้งแพ็คเกจโอเพ่นซอร์สอื่นที่คุณต้องติดตั้งแพ็คเกจโอเพ่นซอร์สอื่น ๆ และอื่น ๆไม่ใช่เพื่อนของคุณ
Steve Hollasch

SourceForge ถูกบล็อกโดยนโยบายไฟร์วอลล์ของงานของฉัน :-(
SnookerC

1
สิ่งนี้ยังคงใช้ sotware บุคคลที่สาม
ДеянДобромиров

3

นี่เป็นเวอร์ชันที่ได้รับการอัปเดตสำหรับคำตอบของ @ 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

2

คุณบอกว่าคุณกำลังพยายามทำสิ่งนี้โดยไม่ใช้ซอฟต์แวร์ของบุคคลที่สาม ฉันไม่แน่ใจว่าคุณจะพิจารณาซอฟต์แวร์ "บุคคลที่สาม" ของ. NET หรือไม่

แต่คุณสามารถสร้างโปรแกรมอรรถประโยชน์บรรทัดคำสั่งของคุณเองใน. NET ไม่ควรใช้โค้ดเกินสองสามบรรทัด

คลาส ZipFile


0

การเพิ่มคำตอบและความคิดเห็นของ @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

-4

หากต้องการ zip ไฟล์:

C:\> zip -9 -m -o file.dat.zip file.dat
  • -9 การบีบอัดสูงสุด
  • -m ลบไฟล์ต้นฉบับหลังจากการบีบอัดสำเร็จ
  • - ตั้งวันที่แก้ไขของไฟล์ zip เช่นเดียวกับไฟล์ต้นฉบับ
  • แย่มากต้องให้ชื่อของไฟล์ zip ที่ต้องการแทนมันแค่เพิ่มนามสกุล. zip ไปยังชื่อ ot ไฟล์ที่จะบีบอัด

4
สองสิ่ง: (1) "zip" ไม่มีให้ใน windows ดังนั้นจึงอาจเป็นบุคคลที่สามที่คุณมี และตามคำถามของฉันฉันไม่สามารถติดตั้งบุคคลที่สามได้ (2) เหตุผลที่คุณต้องระบุชื่อที่ต้องการเนื่องจากการซิปสร้างและจัดเก็บไฟล์ (เช่นโฟลเดอร์ในลักษณะที่ปรากฏ) และคุณอาจมีมากกว่าหนึ่งไฟล์
Roee Gavirel

@RoeeGavirel ในเซิร์ฟเวอร์ฉันพบยูทิลิตีบรรทัดคำสั่ง zip ไม่มีเครื่องมือ winzip GUI ติดตั้งดังนั้นฉันเดาเครื่องมือเปล่าของ CLI ที่มาพร้อมกับ Windows ในทางตรงกันข้ามยูทิลิตีการบีบอัด Unix / Linux เช่นการบีบอัด bzip2 และ gzip สร้างไฟล์บีบอัดที่มีชื่อไฟล์เดิมพร้อมกับนามสกุล (.Z, .bz2 หรือ. gz) หากคุณไม่ผ่านชื่อที่ต้องการ ไฟล์บีบอัด
Tulains Córdova

-4

คุณสามารถคลายบีบอัดไฟล์ซิปที่บีบอัดหรือเนทิฟโดยใช้คำสั่งExpandเช่น

expand MyFile.zip myFile

9
ฉันลองมัน แต่มันคัดลอก MyFile.zip ไปยังโฟลเดอร์ myFile,
fhnaseer

สิ่งนี้ช่วยให้ฉัน C: \> ขยาย /?
snow6oy

11
ขยายใช้งานได้กับไฟล์. cab เท่านั้นและไม่เหมาะสำหรับไฟล์ zip
рüффп

2
แสดงความคิดเห็นอื่น ๆ ที่นี่ Expand file.zip fileเพียงแค่คัดลอกไฟล์ซิปไปยังไฟล์อื่นโดยไม่มีนามสกุล มันไม่ได้บีบอัด ZIP ลงในโฟลเดอร์
Dave Marley
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.