Làm thế nào để giải nén một tập tin bằng cách sử dụng dòng lệnh? [đóng cửa]


164

Những lệnh nào có thể được sử dụng thông qua dòng lệnh để giải nén một tập tin?
Tốt nhất là một cái gì đó được tích hợp trong Windows hoặc các công cụ mã nguồn mở / miễn phí.


1
Một tìm kiếm nhanh trên Google đã đưa ra điều này . Điều đó hoạt động trong các cửa sổ (không rõ là bạn đang sử dụng Windows hay HĐH thực sự là DOS).
Jeremy

26
Trừ khi bạn đang chạy một phiên bản windows thực sự cũ (ME hoặc cũ hơn), dòng lệnh windows không phải là DOS. :)
Tyler McHenry

Cách dễ nhất để giải nén tệp là sử dụng unzip.exe. Ví dụ: unzip.exe source.zip -d target_dir. URL: stahlworks.com/dev/index.php?tool=zipunzip
zappee

2
Windows với Powershell5 có thể làm điều đó tự nhiên với Exand-ArchiveCompress-Archive. Danh dự nơi danh dự là do.
LosManos

1
giải nén [tên tệp] .zip
Amranur Rahman

Câu trả lời:


53

11
URL đầu tiên được liệt kê là một ứng dụng 16 bit thực sự, do đó không hoạt động trên các hệ điều hành x64. Chỉ cần một cái đầu lên.
Mark Henderson

38
nếu bạn đang dùng Windows 7 hoặc 10 với quyền hạn, bạn có thể sử dụng:powershell.exe -NoP -NonI -Command "Expand-Archive '.\file.zip' '.\unziped\'"
AK_ 17/03/18

@AK_ còn Windows 8 hay 8.1 thì sao?
Frank Vũ

2
@AK_ bạn nên đưa ra câu trả lời của riêng mình.
BrainStone

221

Nếu bạn đã có java trên PC và 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

hoặc nếu không trong đường dẫn của bạn:

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

Toàn bộ các tùy chọn cho công cụ jar có sẵn ở đây .

Ví dụ:

Extract jar file
    jar x[v]f jarfile [inputfiles] [-Joption] 
    jar x[v] [inputfiles] [-Joption]

37
Một gợi ý. Bạn cần JDK, và không chỉ JRE nếu bạn muốn sử dụng jar.
Qben

1
Thật kỳ lạ, m jar thực sự giải quyết được một phần vấn đề, vì nó có thể liệt kê các tệp bên trong kho lưu trữ và trích xuất các tệp được chỉ định, tuy nhiên, không thể trích xuất tất cả các tệp cùng một lúc ... khá kỳ lạ
mikus

@mikus: tại sao không, chỉ cần sử dụng lệnh <code> jar.exe xvf Compced.zip </ code>
Xinus

1
java.io.FileNotFoundException: test.zip (Hệ thống không thể tìm thấy tệp được chỉ định)
markj

Có cách nào để xác định một thư mục đích? (như khi bạn chọn tùy chọn giải nén)?
Leonardo Alves Machado

41

Đầu tiên, hãy viết một tiện ích giải nén bằng vbscript để kích hoạt chức năng giải nén riêng trong Windows. Sau đó bỏ đoạn script từ trong tệp bó của bạn và sau đó gọi nó. Sau đó, nó tốt như đứng một mình. Tôi đã làm nó trong quá khứ cho nhiều nhiệm vụ. Bằng cách này, nó không yêu cầu các ứng dụng của bên thứ ba, chỉ cần một tệp bó thực hiện mọi thứ.

Tôi đặt một ví dụ trên blog của mình về cách giải nén tệp bằng tệp bó :

' j_unzip.vbs
'
' UnZip a file script
'
' By Justin Godden 2010
'
' It's a mess, I know!!!
'

' Dim ArgObj, var1, var2
Set ArgObj = WScript.Arguments

If (Wscript.Arguments.Count > 0) Then
 var1 = ArgObj(0)
Else
 var1 = ""
End if

If var1 = "" then
 strFileZIP = "example.zip"
Else
 strFileZIP = var1
End if

'The location of the zip file.
REM Set WshShell = CreateObject("Wscript.Shell")
REM CurDir = WshShell.ExpandEnvironmentStrings("%%cd%%")
Dim sCurPath
sCurPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")
strZipFile = sCurPath & "\" & strFileZIP
'The folder the contents should be extracted to.
outFolder = sCurPath & "\"

 WScript.Echo ( "Extracting file " & strFileZIP)

Set objShell = CreateObject( "Shell.Application" )
Set objSource = objShell.NameSpace(strZipFile).Items()
Set objTarget = objShell.NameSpace(outFolder)
intOptions = 256
objTarget.CopyHere objSource, intOptions

 WScript.Echo ( "Extracted." )

' This bit is for testing purposes
REM Dim MyVar
REM MyVar = MsgBox ( strZipFile, 65, "MsgBox Example"

Sử dụng nó như thế này:

cscript //B j_unzip.vbs zip_file_name_goes_here.zip

3
Nói chung, việc đưa mã vào câu trả lời của bạn thường được coi là tốt và nói chung là không tốt để liên kết với mã - chỉ cần một cái đầu lên!
Bradshaw giàu

39

7-Zip , đây là mã nguồn mở, miễn phí và hỗ trợ nhiều định dạng.

7z.exe x myarchive.zip

1
nếu nội dung được trích xuất đã tồn tại và bạn muốn ghi đè nội dung hiện có mà không được nhắc, thì hãy sử dụng "7z.exe x -y myarchive.zip"
Sologneu Bhuta

22

Như những người khác đã ám chỉ, 7-zip là tuyệt vời.

Lưu ý: Tôi sẽ nén và sau đó giải nén một tập tin. Giải nén ở phía dưới.

Đóng góp của tôi:

Nhận được

Phiên bản dòng lệnh 7-Zip

URL hiện tại

http://www.7-zip.org/doad.html

Cú pháp?

Bạn có thể đặt các mục sau vào tệp .bat

"C:\Program Files\7-Zip\7z.exe" a MySuperCoolZipFile.zip "C:\MyFiles\*.jpg" -pmypassword -r -w"C:\MyFiles\" -mem=AES256

Tôi đã chỉ ra một vài lựa chọn.

-r là đệ quy. Thông thường những gì bạn muốn với chức năng zip.

a là để "lưu trữ". Đó là tên của tệp zip đầu ra.

-p là mật khẩu (tùy chọn)

-w là một thư mục nguồn. Điều này sẽ lồng các tệp của bạn một cách chính xác trong tệp zip, mà không cần thêm thông tin thư mục.

-mem là cường độ mã hóa.

Co nhung nguoi khac. Nhưng ở trên sẽ giúp bạn chạy.

LƯU Ý: Thêm mật khẩu sẽ khiến tệp zip không thân thiện khi xem tệp qua Windows Explorer. Khách hàng có thể cần bản sao 7-zip (hoặc winzip hoặc khác) của riêng họ để xem nội dung của tệp.

EDIT ::::::::::::( chỉ là những thứ bổ sung).

Có một phiên bản "dòng lệnh" có lẽ phù hợp hơn cho việc này: http://www.7-zip.org/doad.html

(hiện tại (tại thời điểm viết) liên kết trực tiếp) http://sourceforge.net/projects/sevenzip/files/7-Zip/9.20/7za920.zip/doad

Vì vậy, lệnh zip sẽ là (với phiên bản dòng lệnh của công cụ 7 zip).

"C:\WhereIUnzippedCommandLineStuff\7za.exe" a MySuperCoolZipFile.zip "C:\MyFiles\*.jpg" -pmypassword -r -w"C:\MyFiles\" -mem=AES256

Bây giờ phần giải nén : (để giải nén tệp bạn vừa tạo)

"C:\WhereIUnzippedCommandLineStuff\7zipCommandLine\7za.exe" e MySuperCoolZipFile.zip "*.*" -oC:\SomeOtherFolder\MyUnzippedFolder -pmypassword -y -r

Thay thế cho đối số "e", có đối số ax.

  e: Extract files from archive (without using directory names)
  x: eXtract files with full paths

Tài liệu ở đây:

http://sevenzip.sourceforge.jp/chm/cmdline/commands/extract.htmlm


11

Cảm ơn Rich, tôi sẽ lưu ý về điều đó. Vì vậy, đây là kịch bản cho giải pháp của riêng tôi. Nó không yêu cầu công cụ giải nén của bên thứ ba.

Bao gồm tập lệnh bên dưới khi bắt đầu tập tin bó để tạo hàm và sau đó để gọi hàm, lệnh là ... cscript /B j_unzip.vbs zip_file_name_goes_here.zip

Đây là kịch bản để thêm vào đầu ...

REM Thay đổi thư mục làm việc trở lại thư mục hiện tại để tương thích với Vista & 7
% ~ d0
CD% ~ dp0
Thư mục REM đã thay đổi

REM Tập lệnh này tải lên các tập tin của ...

    > j_unzip.vbs ECHO '
    >> j_unzip.vbs ECHO 'Giải nén tập lệnh
    >> j_unzip.vbs ECHO '
    >> j_unzip.vbs ECHO 'Đó là một mớ hỗn độn, tôi biết !!!
    >> j_unzip.vbs ECHO '
    >> j_unzip.vbs ECHO.
    >> j_unzip.vbs ECHO 'Dim ArgObj, var1, var2
    >> j_unzip.vbs ECHO Đặt ArgObj = WScript.Argument
    >> j_unzip.vbs ECHO.
    >> j_unzip.vbs ECHO If (Wscript.Argument.Count ^> 0) Sau đó
    >> j_unzip.vbs ECHO. var1 = ArgObj (0)
    >> j_unzip.vbs Khác ECHO
    >> j_unzip.vbs ECHO. var1 = ""
    >> j_unzip.vbs Kết thúc ECHO nếu
    >> j_unzip.vbs ECHO.
    >> j_unzip.vbs ECHO Nếu var1 = "" thì
    >> j_unzip.vbs ECHO. strFileZIP = "example.zip"
    >> j_unzip.vbs Khác ECHO
    >> j_unzip.vbs ECHO. strFileZIP = var1
    >> j_unzip.vbs Kết thúc ECHO nếu
    >> j_unzip.vbs ECHO.
    >> j_unzip.vbs ECHO 'Vị trí của tệp zip.
    >> j_unzip.vbs ECHO REM Đặt WshShell = CreateObject ("Wscript.Shell")
    >> j_unzip.vbs ECHO REM CurDir = WshShell.ExpandEn MôiStrings ("%% cd %%")
    >> j_unzip.vbs ECHO Dim sCurPath
    >> j_unzip.vbs ECHO sCurPath = CreateObject ("Scripting.FileSystemObject"). GetAbsolutePathName (".")
    >> j_unzip.vbs ECHO strZipFile = sCurPath ^ & "\" ^ & strFileZIP
    >> j_unzip.vbs ECHO 'Thư mục nội dung cần được trích xuất.
    >> j_unzip.vbs ECHO outFolder = sCurPath ^ & "\"
    >> j_unzip.vbs ECHO.
    >> j_unzip.vbs ECHO. WScript.Echo ("Trích xuất tệp" ^ & strFileZIP)
    >> j_unzip.vbs ECHO.
    >> j_unzip.vbs ECHO Đặt objShell = CreateObject ("Shell.Application")
    >> j_unzip.vbs ECHO Đặt objSource = objShell.NameSpace (strZipFile) .Items ()
    >> j_unzip.vbs ECHO Đặt objTarget = objShell.NameSpace (outFolder)
    >> j_unzip.vbs ECHO intOptions = 256
    >> j_unzip.vbs ECHO objTarget.CopyHere objSource, intOptions
    >> j_unzip.vbs ECHO.
    >> j_unzip.vbs ECHO. WScript.Echo ("Trích xuất.")
    >> j_unzip.vbs ECHO.

2
đẹp :) Tôi sử dụng cái này để tải xuống dòng lệnh 7zip (có thể thực thi được nén (thật lạ))
Sebastian

Điều này đang hoạt động như mong đợi, bây giờ tôi có thể nén bất kỳ thư mục nào và tạo exe bằng iexpress và giải nén bằng cách này. Điều này có hoạt động trong windows 10 không.
Kiran Kumar

9

Có một bài viết về cách xử lý tệp Windows .ZIP tích hợp với VBscript tại đây:

https://www.aspfree.com/c/a/Windows-Scripting/Compression-Folders-in-WSH/

(Đoạn mã cuối cùng liên quan đến trích xuất)


Điều này không dễ nhưng đây có vẻ là một giải pháp rất tốt khi chỉ sử dụng chức năng thư mục zip của windows. Tôi đã tìm kiếm một cái gì đó trong một thời gian. Cảm ơn!
Andre Steenveld

5

Các tệp ZIP ban đầu được tạo bằng phần mềm dòng lệnh MS-DOS từ PKWare, hai chương trình là PKZIP.EXE và PKUNZIP.EXE. Tôi nghĩ bạn vẫn có thể tải xuống PKUNZIP tại trang web PKWare tại đây:

http://www.pkware.com/software-pkzip/dos-compression

Dòng lệnh thực tế có thể trông giống như thế này:

C:\>pkunzip c:\myzipfile.zip c:\extracttothisfolder\

1
Đó là oldSchool!
granadaCoder

3

Lấy một thực thi từ thông tin-zip .

Info-ZIP hỗ trợ phần cứng từ máy vi tính cho đến siêu máy tính Cray, chạy trên hầu hết tất cả các phiên bản Unix, VMS, OS / 2, Windows 9x / NT / vv. (còn gọi là Win32), Windows 3.x, Windows CE, MS-DOS, AmigaDOS, Atari Tosh, Acorn RISC OS, BeOS, Mac OS, SMS / QĐOS, MVS và OS / 390 OE, VM / CMS, FlexOS, Tandem NSK và Human68K (tiếng Nhật). Ngoài ra còn có một số hỗ trợ (cũ) cho LynxOS, TOPS-20, AOS / VS và Novell NLMs. Thư viện chia sẻ (DLL) có sẵn cho Unix, OS / 2, Win32 và Win16 và giao diện đồ họa có sẵn cho Win32, Win16, WinCE và Mac OS.


1

Sao chép mã dưới đây vào một tệp bó và thực hiện. Dưới đây yêu cầu Winzip phải được cài đặt / truy cập từ máy của bạn. Thay đổi các biến theo nhu cầu của bạn.

@ECHO OFF
SET winzip_path="C:\Program Files\WinZip"
SET source_path="C:\Test"
SET output_path="C:\Output\"
SET log_file="C:\Test\unzip_log.txt"
SET file_name="*.zip"

cd %source_path%
echo Executing for %source_path% > %log_file%

FOR /f "tokens=*" %%G IN ('dir %file_name% /b') DO (
echo Processing : %%G
echo File_Name : %%G >> %log_file%
%winzip_path%\WINZIP32.EXE -e %%G %output_path%
)

PAUSE
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.