如何使用命令行解压文件?

184

有哪些命令可以通过命令行解压文件?
最好使用内置于Windows或开源/免费工具。


1
一个快速的谷歌搜索找到了这个。它适用于Windows(不清楚您是否使用Windows,或者操作系统实际上是DOS)。 - Jeremy
27
除非您使用的是非常旧的Windows版本(如ME或更早),否则Windows命令行不是DOS。 :) - Tyler McHenry
4
Windows的PowerShell 5可以使用"Expand-Archive"和"Compress-Archive"本地执行此操作。 [尊重功劳归功之人。] (https://dev59.com/f2Mm5IYBdhLWcg3whfWe#40228216) - LosManos
1
解压缩 [文件名].zip - Amranur Rahman
如何使用cmd解压文件?- 这个在superuser上的帖子似乎更新得很多。 - brc-dd
显示剩余3条评论
9个回答

234
如果你已经在电脑上安装了Java开发工具包(JDK),并且bin目录已经添加到了系统路径中(在大多数情况下),那么你可以使用命令行:
jar xf test.zip

如果不在你的路径中:

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

完整的jar工具选项集合可以在这里找到。

示例:

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

42
提示:如果想使用jar,你需要JDK而不仅仅是JRE。 - Qben
1
很奇怪,m jar实际上只能部分解决问题,因为它能够列出存档文件中的文件并提取指定的文件,但是无法同时提取所有文件...非常奇怪。 - mikus
@mikus:为什么不直接使用命令<code>jar.exe xvf Compressed.zip</code>? - Xinus
1
java.io.FileNotFoundException: test.zip(系统找不到指定的文件) - markj

57

12
第一个列出来的URL是一个真正的16位应用程序,因此不能在x64操作系统上运行。提醒一下。 - Mark Henderson
53
如果您正在使用带有 PowerShell 的 Windows 7 或 10,则可以使用以下命令进行解压缩: powershell.exe -NoP -NonI -Command "Expand-Archive '.\file.zip' '.\unziped\'" - AK_
@AK_ Windows 8或8.1怎么样? - Frank Vu
PowerShell命令Expand-Archive在Windows 7 SP1上需要.NET 4.5 - WestFarmer
2
在较新的 Windows 版本中,您可以使用 tar - 非常简单。 - Aviko
@Aviko:非常实用的提示,方便易用。然而,Tar 无法创建 zip 文件,只能创建 tar 文件。不过,Windows Explorer 可以打开这样的 tar 文件,就像它可以打开 cab 文件一样。 - undefined

47

7-Zip是一个开源、免费且支持多种格式的软件。

7z.exe x myarchive.zip

1
如果您想覆盖现有内容而不受提示的影响,则使用“7z.exe x -y myarchive.zip”提取内容。 - Suketu Bhuta

42

首先,使用VBScript编写一个解压缩实用程序来触发 Windows 中的本地解压缩功能。然后从批处理文件内部传出脚本并调用它。这样就像是独立的一样好用。我过去已经为许多任务完成了此操作。这种方式不需要第三方应用程序,只需要一个可以完成所有操作的批处理文件。

我在我的博客上放了一个示例,演示如何使用批处理文件解压缩文件。

' 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"

用法如下:

cscript //B j_unzip.vbs zip_file_name_goes_here.zip

25

正如其他人所提到的,7-zip 是非常好的。

注意: 我将要压缩并解压文件。解压在底部。

我的贡献:

获取

7-Zip 命令行版本

当前网址

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

语法?

您可以将以下内容放入 .bat 文件中

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

我列出了几个选项。

-r 是递归的。通常是在使用 zip 功能时需要的。

a 是“archive”的缩写。这是输出 zip 文件的名称。

-p 是密码(可选)。

-w 是源目录。这将在 zip 文件中正确地嵌套您的文件,而不会包含额外的文件夹信息。

-mem 是加密强度。

完整文档(针对“a”,也称为“添加”)在此处:

https://sevenzip.osdn.jp/chm/cmdline/commands/add.htm

还有其他选项。但以上内容足以让您开始运行。

注意:添加密码将使得通过 Windows资源管理器查看文件时,zip 文件变得不友好。客户端可能需要自己拥有 7-zip(或 winzip 或其他工具)来查看文件的内容。

编辑::::::::::::(额外的材料)

有一个“命令行”版本,可能更适合这种情况:http://www.7-zip.org/download.html

(当前(撰写本文时)的直接链接)http://sourceforge.net/projects/sevenzip/files/7-Zip/9.20/7za920.zip/download

因此,使用 7 zip 工具的命令行版本,zip 命令将如下:

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

现在是 解压缩部分:(解压刚刚创建的文件)

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

除了使用“e”参数外,还有一个“x”参数作为替代方案。

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

文档在这里:

完整的文档(针对“e”或“提取”)在这里

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


请问,我该如何添加冗长输出以便能够看到文件保存在哪里? - Raul Chiarella
你只能添加可用的(命令行参数)。请按照我答案中提供的两个不同的面包屑路径进行操作。(标有“完整文档___在此处”的标签,其中____是a / Add或e / Extract。) - granadaCoder

11

谢谢Rich,我会注意的。以下是我的解决方案脚本,不需要第三方解压工具。

在批处理文件的开头包含下面的脚本以创建函数,然后调用函数的命令是... cscript /B j_unzip.vbs zip_file_name_goes_here.zip

这是要添加到顶部的脚本...

REM 为了兼容Vista和7,将工作文件夹更改回当前目录
%~d0
CD %~dp0
REM 文件夹已更改
REM 这个脚本用来解压文件...
> j_unzip.vbs ECHO ' >> j_unzip.vbs ECHO ' 解压缩脚本 >> j_unzip.vbs ECHO ' >> j_unzip.vbs ECHO ' 它很混乱,我知道!!! >> j_unzip.vbs ECHO ' >> j_unzip.vbs ECHO. >> j_unzip.vbs ECHO ' Dim ArgObj, var1, var2 >> j_unzip.vbs ECHO Set ArgObj = WScript.Arguments >> j_unzip.vbs ECHO. >> j_unzip.vbs ECHO If (Wscript.Arguments.Count ^> 0) Then >> j_unzip.vbs ECHO. var1 = ArgObj(0) >> j_unzip.vbs ECHO Else >> j_unzip.vbs ECHO. var1 = "" >> j_unzip.vbs ECHO End if >> j_unzip.vbs ECHO. >> j_unzip.vbs ECHO If var1 = "" then >> j_unzip.vbs ECHO. strFileZIP = "example.zip" >> j_unzip.vbs ECHO Else >> j_unzip.vbs ECHO. strFileZIP = var1 >> j_unzip.vbs ECHO End if >> j_unzip.vbs ECHO. >> j_unzip.vbs ECHO ' 压缩文件的位置。 >> j_unzip.vbs ECHO REM Set WshShell = CreateObject("Wscript.Shell") >> j_unzip.vbs ECHO REM CurDir = WshShell.ExpandEnvironmentStrings("%%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 '指定要提取内容的文件夹。 >> j_unzip.vbs ECHO outFolder = sCurPath ^& "\" >> j_unzip.vbs ECHO. >> j_unzip.vbs ECHO. WScript.Echo ( "正在解压文件 " ^& strFileZIP) >> j_unzip.vbs ECHO. >> j_unzip.vbs ECHO Set objShell = CreateObject( "Shell.Application" ) >> j_unzip.vbs ECHO Set objSource = objShell.NameSpace(strZipFile).Items() >> j_unzip.vbs ECHO Set 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 ( "解压完成。") >> j_unzip.vbs ECHO.

6
最初,ZIP文件是由PKWare的MS-DOS命令行软件创建的,其中包括两个程序:PKZIP.EXE和PKUNZIP.EXE。我认为您仍然可以在PKWare网站上下载PKUNZIP,链接如下:http://www.pkware.com/software-pkzip/dos-compression。实际的命令行可能看起来像这样:
C:\>pkunzip c:\myzipfile.zip c:\extracttothisfolder\

不支持Win64运行。 - Vincent Alex

3

info-zip下载可执行文件。

Info-ZIP支持从微型计算机到Cray超级计算机的硬件,运行在几乎所有版本的Unix、VMS、OS/2、Windows 9x/NT等操作系统上。同时也支持Windows 3.x、Windows CE、MS-DOS、AmigaDOS、Atari TOS、Acorn RISC OS、BeOS、Mac OS、SMS/QDOS、MVS和OS/390 OE、VM/CMS、FlexOS、Tandem NSK和Human68K(日本)。此外,还提供了对LynxOS、TOPS-20、AOS/VS以及Novell NLMs的一些(旧)支持。Unix、OS/2、Win32和Win16都可以使用共享库(DLLs),并且Win32、Win16、WinCE和Mac OS都有图形界面。


1

将以下代码复制到批处理文件中并执行。 以下需要安装/从您的计算机访问Winzip。 根据您的需求更改变量。

@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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接