248

Trong Windows, bạn có thể zipmột số tệp bằng cách

nhấp chuột phải -> gửi đến -> thư mục nén (nén)

unzipbằng cách nhấp đúp vào .ziptệp và giải nén các tệp.

Có cách nào để áp dụng các khả năng đó từ tập lệnh (tệp .bat) mà không cần cài đặt bất kỳ bên thứ 3 nào không?

|
74

Trở lại năm 2013, điều đó là không thể. MS cung cấp không thực thi cho điều này.

Xem liên kết này để biết một số cách VBS để làm điều này. https://superuser.com/questions/201371/create-zip-folder-from-the-command-line-windows

Từ Windows 8 trở đi, .Net Framework 4.5 được cài đặt theo mặc định, có System.IO.Compression.ZipArchive và PowerShell, người ta có thể viết các tập lệnh để đạt được điều này, xem https://stackoverflow.com/a/26843122/71312

|
  • 1

    Điều này không đúng khi PS cho phép điều này và được cài đặt sẵn trên Windows và có sẵn thông qua dòng lệnh.

    – Hoàng Ðoan Trang 16:05:49 14/08/2015
  • 1

    @DanAtkinson Cập nhật. Nó đã được trả lời vào năm 2013, liên kết cung cấp một số cách VBS. Cách PS cần .Net 4.5, cần Windows 8 trở lên.

    – Tạ Xuân Bình 01:48:13 15/08/2015
  • 1

    Cảm ơn các cập nhật! Đã sửa đổi phiếu bầu của tôi cho phù hợp. :)

    – Le Trinh 14:11:30 15/08/2015
  • 1

    @DanAtkinson PS không phải là "dòng lệnh".

    – Dương Duy Tâm 23:26:36 21/07/2016
  • 1

    @MichaelMrozek "dòng lệnh" nói chung chung cho bất kỳ dòng lệnh nào, không cụ thể là CMD / NHÀ, và PS chắc chắn là một dòng lệnh, như bash, sh, rsh trên * nix. Nhưng chỉ cần đi xa hơn, vì bạn có thể chạy powershell từ dòng lệnh, nó sẽ trả lời câu hỏi ngay cả khi bạn muốn tin rằng cmd / lệnh là dòng lệnh duy nhất và duy nhất.

    – Đinh Thanh 18:21:34 06/01/2017
163

Để mở rộng dựa trên giải pháp PowerShell của Steven Penny, bạn có thể kết hợp nó vào một tệp bó bằng cách gọi powershell.exe như thế này:

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

Như Ivan Shilo đã nói, điều này sẽ không hoạt động với PowerShell 2, nó yêu cầu PowerShell 3 trở lên và .NET Framework 4.

|
  • 1

    Trên thực tế, điều này đã có sẵn trong .NET 4.5.

    – Hoàng Ðoan Trang 19:00:05 30/04/2015
  • 1

    Đối với những người (như tôi), người tự hỏi làm thế nào để trích xuất vào thư mục thực tế (thay vì tạo một thư mục mới) chỉ cần đặt tham số đích thành '.', ví dụ:powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', '.'); }"

    – Tạ Xuân Bình 14:12:55 01/02/2016
  • 1

    Chúng ta có thể sử dụng các lệnh này để tăng nén không? Giống như làm cho nó siêu nén để giảm kích thước tập tin?

    – Le Trinh 04:34:00 26/07/2017
  • 1

    Mục đích của là & {}gì? Với PS5, điều này cũng hoạt động:powershell.exe -nologo -noprofile -command "Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', '.');"

    – Dương Duy Tâm 09:57:10 29/11/2017
  • 1

    @RoiDanton Làm cách nào để sử dụng chuỗi định dạng để xác định src.zip và Dest.zip?

    – Đinh Thanh 08:03:23 04/03/2019
150

Kể từ .NET 4.5 , PowerShell có thể làm điều này:

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

Đối với hai dòng cuối cùng barfoocó thể được thay thế bằng tên mà bạn muốn thư mục có hoặc bất kỳ tên nào của thư mục có sẵn. foo.ziptrong cả hai trường hợp, hoạt động như tệp zip để lưu hoặc giải nén.

|
118

Nếu bạn đã cài đặt Java , bạn có thể nén vào tệp lưu trữ ZIP bằng lệnh jar :

jar -cMf targetArchive.zip sourceDirectory

c = Tạo một tệp lưu trữ mới.

M = Chỉ định rằng không nên thêm tệp kê khai vào kho lưu trữ.

f = Cho biết tên tệp mục tiêu.

|
58

PowerShell 5.0

Từ Microsoft.PowerShell.Archivebạn có thể sử dụng:

Ví dụ:

  • Tạo result.ziptừ toàn bộ Testthư mục:

    Compress-Archive -Path C:\Test -DestinationPath C:\result
    
  • Trích xuất nội dung result.ziptrong Testthư mục được chỉ định :

    Expand-Archive -Path result.zip -DestinationPath C:\Test
    
|
  • 1

    Điều này làm việc tuyệt vời, cảm ơn bạn. Đối với bất kỳ ai kết thúc tại đây, bạn có thể sử dụng powershell Compress-Archive -Path C:\SomeFile.ext -DestinationPath C:\SomeFile.zipngay từ dòng lệnh mà không cần phải tạo tập lệnh (giả sử bạn đã cài đặt Powershell v5, mà bạn có thể thực hiện ít nhất là quay lại Windows 7).

    – Tạ Khánh Hà 20:14:26 03/01/2017
  • 1

    Hoạt động tuyệt vời, thêm tùy chọn -Force nếu bạn đang dự định chạy lại nó.

    – Hoàng Khắc Thành 10:04:19 13/09/2017
  • 1

    @Beems, Cảm ơn bạn! Nhưng tôi nghĩ bạn điên con đường / đích ngược lại?

    – Hồ Trọng Tường 10:03:24 29/06/2018
35

Nó không chính xác là một zip nhưng cách duy nhất để nén một tệp bằng các công cụ Windows là:

makecab <source> <dest>.cab

Để giải nén:

expand <source>.cab <dest>

Ví dụ nâng cao (từ 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"

Thông tin thêm: makecab , mở rộng , makecab sử dụng nâng cao

|
27

Sử dụng 7-Zip:

Zip : bạn có một thư mục foovà muốn nén nó vàomyzip.zip

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

Giải nén : bạn muốn giải nén nó ( myzip.zip) vào thư mục hiện tại ( ./)

"C:\Program Files\7-Zip\7z.exe" x  myzip.zip  -o./ -y -r
|
8

Tôi đã tìm cách trả lời câu hỏi chính xác này và từ nghiên cứu của tôi, câu trả lời của DiryBoy dường như là chính xác.

Tôi tìm thấy chương trình compact.exe nén các tệp nhưng không tạo tệp nén cao (hoặc bộ tệp). Nó tương tự như tùy chọn bạn nhận được khi nhấp chuột phải vào ký tự ổ đĩa hoặc phân vùng trong Windows. Bạn có tùy chọn để dọn dẹp (xóa tệp tạm thời, v.v.) cũng như nén tệp. Các tệp nén vẫn có thể truy cập được nhưng chỉ được nén để tạo không gian trên ổ đĩa có dung lượng thấp.

Tôi cũng tìm thấy nén.exe mà tôi đã có trên máy tính của mình. Nó không phải là tự nhiên trên hầu hết các máy tính windows và là một phần của bộ tài nguyên 2003. Nó tạo ra một tệp nén các loại nhưng nó thực sự giống với các tệp từ đĩa thiết lập windows (có dấu gạch dưới là ký tự cuối cùng của phần mở rộng hoặc tên tệp). Và lệnh extract.exe trích xuất các tệp đó.

Tuy nhiên, câu thần chú là, nếu nó có thể được thực hiện tự nhiên thông qua GUI thì có khả năng sẽ thực hiện điều đó thông qua lô, .vbs hoặc một số loại tập lệnh khác trong dòng lệnh. Vì các cửa sổ đã có tùy chọn 'gửi đến' để tạo tệp zip, tôi biết rằng phải có một cách để thực hiện thông qua dòng lệnh và tôi đã tìm thấy một số tùy chọn.

Đây là một liên kết tuyệt vời cho thấy cách nén tệp bằng các lệnh gốc của windows.

https://superuser.com/questions/110991/can-you-zip-a-file-from-the-command-prompt-USE-only-windows-built-in-capabili

Tôi đã thử nghiệm nó với một thư mục chứa nhiều tệp và thư mục lồng nhau và nó hoạt động hoàn hảo. Chỉ cần làm theo định dạng của dòng lệnh.

Ngoài ra còn có một cách để giải nén các tập tin thông qua dòng lệnh mà tôi tìm thấy. Một cách, chỉ cần mở một cửa sổ thám hiểm cho biết nội dung của tệp nén là gì. Một số trong số này cũng sử dụng Java không nhất thiết phải có nguồn gốc từ windows nhưng phổ biến đến mức nó gần như là như vậy.

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

Làm thế nào để giải nén một tập tin bằng dòng lệnh?

|
6

Bạn có thể sử dụng một vbsscript được bọc trong một tệp BAT. Mã này hoạt động trên một PATH tương đối.

Không cần bất kỳ công cụ hoặc phụ thuộc của bên thứ ba. Chỉ cần đặt SOURCEDIROUTPUTZIP.

tên tệp: 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

Ví dụ sử dụng

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

Ngoài ra, bạn có thể tham số tệp này bằng cách thay thế dòng CScript _zipup.vbs %SOURCEDIR% %OUTPUTZIP%bằng CScript _zipup.vbs %1 %2, trong trường hợp đó, nó có thể được gọi dễ dàng hơn bằng cách gọi đơn giảnCALL ZipUp C:\Source\Dir C:\Archive.zip

|
3

Nguồn mở là bạn của bạn :-)

Đây là UNZIP: http://gnuwin32.sourceforge.net/packages/unzip.htm

Cũng có một lệnh ZIP: http://gnuwin32.sourceforge.net/packages/zip.htm

Tải về Binaries là đủ.

|
  • 1

    Trên Windows 8, nó đưa ra một lỗi: thiếu bzip2.dll.

    – Tạ Khánh Hà 22:54:29 30/04/2015
  • 1

    @Doug nó nói rằng bzip2 là một yêu cầu trên trang và có một liên kết để tải xuống

    – Hoàng Khắc Thành 22:46:41 13/05/2015
  • 1

    Câu hỏi ban đầu là làm thế nào để sử dụng các lệnh Windows tích hợp chuẩn. Ngoài ra, việc yêu cầu người dùng của bạn cài đặt các giải pháp của bên thứ ba khác nhau là điều không mong muốn vì công cụ hoặc giải pháp của riêng bạn hiện chỉ giới hạn ở những người dùng có quyền quản trị trên máy tính của họ hoặc không quan tâm đến một bộ sưu tập nhỏ phụ thuộc vào hệ thống của họ . Nguồn mở có thể là bạn của bạn, nhưng các gói nguồn mở yêu cầu bạn cài đặt các gói nguồn mở khác yêu cầu bạn cài đặt các gói nguồn mở khác, v.v ... quyết định không phải là bạn của bạn.

    – Hồ Trọng Tường 23:21:39 17/01/2016
  • 1

    SourceForge bị chặn bởi chính sách tường lửa của công việc của tôi :-(

    – Hoàng Bảo Nguyên 15:12:25 03/02/2016
  • 1

    Điều này vẫn sử dụng phần mềm sotware của bên thứ ba

    – Trịnh Thạch Thảo 07:12:39 23/08/2017
2

Bạn có thể giải nén tệp nén được nén hoặc nén bằng cách sử dụng lệnh Expand , vd

expand MyFile.zip myFile
|
2

Nếu bạn cần làm điều này như một phần của tập lệnh thì cách tốt nhất là sử dụng Java. Giả sử thư mục bin nằm trong đường dẫn của bạn (trong hầu hết các trường hợp), bạn có thể sử dụng dòng lệnh:

jar xf test.zip

nếu Java không trực tiếp trên tài liệu tham khảo của bạn:

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

Bạn nói rằng bạn đang cố gắng làm điều này mà không cần phần mềm bên thứ 3. Tôi không chắc chắn nếu bạn coi .NET là phần mềm "bên thứ 3".

Nhưng bạn có thể tạo tiện ích dòng lệnh của riêng bạn trong .NET. Nó không cần nhiều hơn một vài dòng mã.

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

|

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.