【问题标题】:How to unzip a file using the command line? [closed]如何使用命令行解压缩文件? [关闭]
【发布时间】:2010-11-04 12:39:09
【问题描述】:

可以通过命令行使用哪些命令来解压缩文件?
最好是内置于 Windows 或开源/免费工具中的东西。

【问题讨论】:

  • 快速谷歌搜索出现this。这在 Windows 中有效(不清楚您是说您使用的是 Windows,还是操作系统实际上是 DOS)。
  • 除非您运行的是真正旧版本的 Windows(ME 或更早版本),否则 Windows 命令行不是 DOS。 :)
  • 解压缩文件最简单的方法是使用 unzip.exe。示例:unzip.exe source.zip -d target_dir。网址:stahlworks.com/dev/index.php?tool=zipunzip
  • 带有 Powershell5 的 Windows 可以通过 Exand-ArchiveCompress-Archive 原生地做到这一点。 Honour where honour is due.
  • 解压[文件名].zip

标签: zip cmd


【解决方案1】:

如果您的 PC 上已经有 Java 开发工具包并且 bin 目录在您的路径中(大多数情况下),您可以使用命令行:

jar xf test.zip

或者如果不在你的路径中:

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

jar 工具的完整选项集here.

例子:

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

【讨论】:

  • 提示。如果你想使用 jar,你需要 JDK,而不仅仅是 JRE。
  • 很奇怪,m jar实际上部分解决了问题,因为它可以列出存档中的文件并提取指定文件,但是不可能同时提取所有文件时间......很奇怪
  • @mikus: 为什么不呢,直接用命令jar.exe xvf Compressed.zip
  • java.io.FileNotFoundException: test.zip(系统找不到指定的文件)
【解决方案2】:

【讨论】:

  • 列出的第一个 URL 是真正的 16 位应用程序,因此不适用于 x64 操作系统。只是提醒一下。
  • 如果您使用的是带有 powershell 的 Windows 7 或 10,您可以使用:powershell.exe -NoP -NonI -Command "Expand-Archive '.\file.zip' '.\unziped\'"
  • @AK_ Windows 8 或 8.1 怎么样?
  • @AK_ 你应该自己回答。
  • powershell commandlet Expand-Archive 在 Windows 7 sp1 上需要 .net 4.5
【解决方案3】:

7-Zip,它是开源的,免费的,支持多种格式。

7z.exe x myarchive.zip

【讨论】:

  • 如果提取的内容已经存在,并且您想在没有提示的情况下覆盖现有内容,则使用“7z.exe x -y myarchive.zip”
【解决方案4】:

首先,使用 vbscript 编写一个解压缩实用程序来触发 Windows 中的本机解压缩功能。然后从批处理文件中输出脚本,然后调用它。然后它和独立一样好。我过去曾为许多任务做过它。这样它就不需要第三方应用程序,只需要一个批处理文件即可。

我把an example on my blog on how to unzip a file using a batch file:

' 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

【讨论】:

  • 在你的答案中加入代码通常被认为是好的,而链接代码通常是不好的——只是提醒一下!
【解决方案5】:

正如其他人所暗示的那样,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 用于“存档”。这是输出 zip 文件的名称。

-p 用于输入密码(可选)

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

-mem 是加密强度。

还有其他的。但是上面的内容会让你跑起来。

注意:当通过 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

所以 zip 命令 将是(使用 7 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

这里的文档:

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

【讨论】:

    【解决方案6】:

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

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

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

    REM 将工作文件夹更改回当前目录以兼容 Vista 和 7 %~d0 光盘 %~dp0 REM 文件夹已更改 REM 这个脚本upzip的文件... > j_unzip.vbs 回声' >> 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 设置 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 如果 var1 = "" 那么 >> 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 设置 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 设置 objSource = objShell.NameSpace(strZipFile).Items() >> j_unzip.vbs ECHO 设置 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。

    【讨论】:

    • 这按预期工作,现在我可以使用 iexpress 压缩任何文件夹并制作 exe 并使用它解压缩。这也适用于 Windows 10。
    【解决方案7】:

    这里有一篇关于使用 VBscript 处理内置 Windows .ZIP 文件的文章:

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

    (最后一个代码简介涉及提取)

    【讨论】:

    • 这并不容易,但这似乎是一个非常好的解决方案,只使用本机 Windows zip 文件夹功能。我一直在寻找这个东西一段时间。谢谢!
    【解决方案8】:

    最初的 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 上运行
    【解决方案9】:

    info-zip 获取可执行文件。

    Info-ZIP 支持从微型计算机一直到 Cray 超级计算机的硬件,可在几乎所有版本的 Unix、VMS、OS/2、Windows 9x/NT/等上运行。 (aka Win32), Windows 3.x, Windows CE, MS-DOS, AmigaDOS, Atari TOS, Acorn RISC OS, BeOS, Mac OS, SMS/QDOS, MVS and OS/390 OE, VM/CMS, FlexOS, Tandem NSK和 Human68K(日语)。还有一些(旧的)对 LynxOS、TOPS-20、AOS/VS 和 Novell NLM 的支持。共享库 (DLL) 可用于 Unix、OS/2、Win32 和 Win16,图形界面可用于 Win32、Win16、WinCE 和 Mac OS。

    【讨论】:

      【解决方案10】:

      将以下代码复制到批处理文件并执行。下面需要从您的机器安装/访问 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-28
        • 2014-08-03
        • 1970-01-01
        • 2013-05-12
        相关资源
        最近更新 更多