【问题标题】:creating batch script to unzip a file without additional zip tools创建批处理脚本以解压缩文件而无需其他 zip 工具
【发布时间】:2014-02-11 14:03:47
【问题描述】:

我正在尝试为 Windows 7 x64 创建一个 .bat 脚本来创建一个文件夹,将文件解压缩到该文件夹​​中,而无需使用 7zip 或解压缩等附加插件。一直在搜索,似乎 Windows 没有内置命令可以轻松地在命令中解压缩。我可以在没有附加插件的情况下解压缩/扩展文件吗?

【问题讨论】:

标签: windows batch-file


【解决方案1】:

试试这个:

@echo off
setlocal
cd /d %~dp0
Call :UnZipFile "C:\Temp\" "c:\path\to\batch.zip"
exit /b

:UnZipFile <ExtractTo> <newzipfile>
set vbs="%temp%\_.vbs"
if exist %vbs% del /f /q %vbs%
>%vbs%  echo Set fso = CreateObject("Scripting.FileSystemObject")
>>%vbs% echo If NOT fso.FolderExists(%1) Then
>>%vbs% echo fso.CreateFolder(%1)
>>%vbs% echo End If
>>%vbs% echo set objShell = CreateObject("Shell.Application")
>>%vbs% echo set FilesInZip=objShell.NameSpace(%2).items
>>%vbs% echo objShell.NameSpace(%1).CopyHere(FilesInZip)
>>%vbs% echo Set fso = Nothing
>>%vbs% echo Set objShell = Nothing
cscript //nologo %vbs%
if exist %vbs% del /f /q %vbs%

修订

让它对每个 zip 文件执行解压缩,为每次使用创建一个文件夹:

@echo off
setlocal
cd /d %~dp0
for %%a in (*.zip) do (
    Call :UnZipFile "C:\Temp\%%~na\" "c:\path\to\%%~nxa"
)
exit /b

如果您不希望它为每个 zip 创建一个文件夹,请更改 Call :UnZipFile "C:\Temp\%%~na\" "c:\path\to\%%~nxa"Call :UnZipFile "C:\Temp\" "c:\path\to\%%~nxa"

【讨论】:

  • 嘿,谢谢。但是该脚本只是复制了文件。它从未扩展过 zip。
  • 这里有一些可以帮助您入门。 dostipsRob Vanderwoude's Batch pages 拥有所有脚本语言。
  • @MattWilliamson 有没有办法在不显示任何 UI 或提示任何内容的情况下进行解压缩?它应该默认覆盖。
  • 如何传递参数,我想提取多个zip文件我不想一直编辑批处理脚本,请帮助
  • 每次运行都会获取一个名为“echo”的空文件,以提取一个 zip 文件夹。通过在我的 cmd 文件末尾添加 if exist "%~dp0echo" del /f /q "%~dp0echo" 来修复。
【解决方案2】:

如果您有 PowerShell 5.0 或更高版本(预装 Windows 10 和 Windows Server 2016):

powershell Expand-Archive your.zip -DestinationPath your_destination

所以.ps1 文件中的代码如下所示:

Expand-Archive your.zip -DestinationPath your_destination

【讨论】:

    【解决方案3】:

    这是一个使用 PowerShell 的快速简单的解决方案:

    powershell.exe -nologo -noprofile -command "& { $shell = New-Object -COM Shell.Application; $target = $shell.NameSpace('C:\extractToThisDirectory'); $zip = $shell.NameSpace('C:\extractThis.zip'); $target.CopyHere($zip.Items(), 16); }"
    

    这将使用资源管理器的内置提取功能,还将显示典型的提取进度窗口。第二个参数16CopyHere 以yes 回答所有问题。

    【讨论】:

    • 需要帮助。不工作:您不能在空值表达式上调用方法。在 line:1 char:205 + ... Creat\Downloads\autoduel.zip'); $target.CopyHere($zip.Items(), 16); } + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull
    • 这听起来像$target 没有定义(可能路径不存在?)。在 cmd 窗口中手动尝试该命令并确保路径存在。
    • 抱歉,我不太擅长技术。我在 cmd 中输入了 $target,它说它不被识别为命令
    • 我的意思不是输入 $target,而是输入整个命令 powershell.exe -nologo -noprofile -command "&amp; { $shell = New-Object -COM Shell.Application; $target = $shell.NameSpace('C:\extractToThisDirectory'); $zip = $shell.NameSpace('C:\extractThis.zip'); $target.CopyHere($zip.Items(), 16); }" 并将 C:\extractToThisDirectory 和 C:\extractThis.zip 替换为您的路径。如果这不起作用,则可能是这两条路径之一是错误的。
    • 我意识到这与代码本身无关。 zip 已损坏,因为我尝试在需要身份验证用户名/密码的网站上使用下载命令调用 webrequest
    【解决方案4】:

    这是我对 Windows 中内置 zi/unzip(压缩/解压缩)功能的概述 - How can I compress (/ zip ) and uncompress (/ unzip ) files and folders with batch file without using any external tools?

    要解压文件,你可以使用这个script

    zipjs.bat unzip -source C:\myDir\myZip.zip -destination C:\MyDir -keep yes -force no
    

    【讨论】:

    • 很棒的工具。小心使用 -force 选项,否则您将丢失目标目录中的所有数据!
    【解决方案5】:

    解决此问题的另一种方法可能是使用诸如 winzip 之类的东西创建一个自解压可执行文件 (.exe),并将其用作安装向量而不是 zip 文件。同样,您可以使用 NSIS 创建可执行安装程序并使用它来代替 zip。

    【讨论】:

      猜你喜欢
      • 2014-11-14
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      • 2013-12-27
      相关资源
      最近更新 更多