【问题标题】:Windows batch script to unzip files on Windows8/8.1在 Windows8/8.1 上解压文件的 Windows 批处理脚本
【发布时间】:2015-02-09 01:42:52
【问题描述】:

默认情况下,Windows 8/8.1 中的所有压缩文件都配置为使用操作系统具有的文件资源管理器程序打开。我想解压缩某个目录中的所有文件,并在使用批处理脚本解压缩时保留文件夹名称。 当机器上安装了 7-Zip 时,我知道该怎么做。但是在没有安装解压软件的情况下,如何在 Windows 8/8.1 上执行此操作?我想使用 windows 脚本来做到这一点。

【问题讨论】:

  • 您无法在普通的批处理命令中执行此操作。没有 zip/unzip 实用程序。
  • 对于 XP 以上的操作系统,可以使用“压缩(压缩)文件夹”功能,您可以右键单击文件夹并单击“发送到”->“压缩(压缩)文件夹”,将生成一个 zip 文件在该文件夹中创建。现在选择这个 zip 文件并右键单击,“全部提取”菜单将可用。如果选择此项,向导将打开以提取文件。我希望通过 Dos Prompt 进行此操作,以便我可以在批处理文件中使用它

标签: batch-file windows-8 cmd windows-8.1 unzip


【解决方案1】:

我找到了使用 vbscript 的方法。这是代码。

strZipFile = ""                                       'name of zip file
outFolder = ""                                       'destination folder of unzipped files

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

为 zip 文件和输出文件夹填写适当的名称(必须加引号)。使用 vbs 扩展名保存脚本。在批处理文件中,我们可以使用以下条目运行脚本:cscript //nologo scriptname.vbs

【讨论】:

  • 你的问题是No VBscript
  • @foxidrive:是的,但我找不到使用纯 Windows 脚本的任何解决方案。我修改了问题。
【解决方案2】:

您可以查看zipjs.com 引入的实用程序here

// unzips only part of the zip with given path inside
zipjs.bat unZipItem -source C:\myDir\myZip.zip\InzipDir\InzipFile -destination C:\OtherDir -keep no -force yes
zipjs.bat unZipItem -source C:\myDir\myZip.zip\InzipDir -destination C:\OtherDir

【讨论】:

    【解决方案3】:

    这个话题很有趣!我做了几个测试,发现用资源管理器打开 .zip 文件后,我可以按某些键来提取文件:Alt-J 和 A 选择“全部提取”,然后 Enter 执行此操作,然后Alt-F 和 Alt-C 关闭资源管理器。我的 Windows 是 8.1 西班牙语版本,所以我不确定这些键是否与英语版本相同。

    然后我编写了一个批处理文件,使用this post 中解释的方法将密钥发送到资源管理器,因此可以自动完成前面的过程。我必须在键之间输入一些延迟,否则资源管理器可能会忽略它们;延迟可能是 .zip 文件大小的函数:较大文件延迟更多秒。

    @if (@CodeSection == @Batch) @then
    
    @echo off
    rem Start explorer with the zip file and wait for it to initialize
    start "" Explorer.exe %1
    timeout /T 3 > NUL
    rem Send to Explorer: Alt-J, A and Enter to extract all files from .zip
    CScript //nologo //E:JScript "%~F0" "%%J"
    timeout /T 1 > NUL
    CScript //nologo //E:JScript "%~F0" "A"
    timeout /T 1 > NUL
    CScript //nologo //E:JScript "%~F0" "{Enter}"
    rem ... and Alt-F Alt-C to end Explorer
    timeout /T 4 > NUL
    CScript //nologo //E:JScript "%~F0" "%%F%%C"
    echo Extracted files:
    dir /p "%~N1"
    goto :EOF
    
    @end
    
    WScript.CreateObject("WScript.Shell").SendKeys(WScript.Arguments(0));
    

    【讨论】:

    • 这是一个糟糕的主意,原因有很多:1)它有硬编码的超时。在大文件上,它可能会在提取完成之前杀死资源管理器。 2)它不检测/处理错误。 3) 它不适用于服务器核心。 4) 每种 Windows 语言可能需要不同的代码。
    • @AndrewMedico:所有 SendKeys 示例都有硬编码的延迟时间,例如 this one。正如我在回答中所说,这种方法需要根据文件大小对键和超时进行一些调整,但我相信它可以以简单的方式解决 OP 的请求。我不明白您为什么更喜欢 OP 手动进行此提取... :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 2013-12-27
    • 2019-04-19
    • 1970-01-01
    相关资源
    最近更新 更多