如何使用Windows的内置功能从脚本中压缩或解压缩?

Roe*_*rel 281 windows zip batch-file

在Windows中,您可以使用.zip一些文件

右键单击 - >发送到 - >压缩(zipped)文件夹

然后.zip双击.zip文件并解压缩文件.

有没有办法从脚本(.bat文件)应用这些功能,而无需安装任何第三方

Jas*_*ett 173

要扩展Steven Penny的PowerShell解决方案,您可以通过调用powershell.exe将其合并到批处理文件中:

powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', 'bar'); }"
Run Code Online (Sandbox Code Playgroud)

正如Ivan Shilo所说,这不适用于PowerShell 2,它需要PowerShell 3或更高版本以及.NET Framework 4.

  • 对于那些(如我)想知道如何提取到实际目录(而不是创建新目录)的人,只需将目标参数设置为`'.'`,例如:`powershell.exe -nologo -noprofile -command"&{ Add-Type -A'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile] :: ExtractToDirectory('foo.zip','.');}"` (10认同)

小智 157

PowerShell可以做到这一点

Add-Type -A System.IO.Compression.FileSystem
[IO.Compression.ZipFile]::CreateFromDirectory('foo', 'foo.zip')
[IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', 'bar')
Run Code Online (Sandbox Code Playgroud)

  • 这是从.NET 4.5开始的. (17认同)

Noa*_*nos 127

如果安装了Java,则可以使用jar命令压缩到ZIP存档:

jar -cMf targetArchive.zip sourceDirectory
Run Code Online (Sandbox Code Playgroud)

c =创建新的存档文件.

M =指定不应将清单文件添加到存档中.

f =表示目标文件名.

  • 太棒了,谢谢,正是我在寻找的... FYI - 我必须删除DOS中的减号...例如jar cMf target.zip sourceDir (3认同)
  • 还不错,但你需要安装JDK,而不是JRE. (3认同)
  • 这是否包含在*“...使用**仅** Windows 的**内置**功能?”*(我的重点) (3认同)
  • 不错的,可能是大多数独立于平台的解决方案;) (2认同)

Dir*_*boy 78

早在2013年,这是不可能的.MS没有为此提供可执行文件.

有关VBS的一些方法,请参阅此链接. https://superuser.com/questions/201371/create-zip-folder-from-the-command-line-windows

从Windows 8开始,默认情况下安装.Net Framework 4.5,可以使用System.IO.Compression.ZipArchive和PowerShell,可以编写脚本来实现此目的,请参阅 /sf/answers/1879018571/

  • @MichaelMrozek好的"命令行"一般指任何命令行,而不是CMD/COMMAND,PS肯定是命令行,就像bash,sh,rsh on*nix一样.但是,为了更进一步,因为您可以从命令行运行powershell,即使您想要相信cmd /命令是唯一的命令行,它也会回答这个问题. (5认同)
  • @DanAtkinson更新.它在2013年得到了回复,链接提供了一些VBS方式.PS方式需要.Net 4.5,需要Windows 8或更高版本. (3认同)
  • 早在 2013 年,这就是可能的(无需安装任何额外的软件)。请参阅[超级用户问题](https://superuser.com/questions/110991/can-you-zip-a-file-from-the-command-prompt-using-only-windows-built-in-capabili/ 111266#111266)。自 2001 年 [Windows XP](http://en.wikipedia.org/wiki/Windows_XP) 推出以来,这已成为可能。可以利用 Windows XP 中的内置 ZIP 功能,因为它是通过 [COM 接口公开的](http://en.wikipedia.org/wiki/Component_Object_Model)。 (2认同)

ROM*_*eer 75

PowerShell 5.0

Microsoft.PowerShell.Archive你可以使用:

例如:

  • 这很棒,谢谢.对于在这里结束的任何人,你可以直接从命令行使用`powershell Compress-Archive -Path C:\ SomeFile.ext -DestinationPath C:\ SomeFile.zip`而不需要编写脚本(假设你安装了Powershell v5,你可以做到至少回到Windows 7). (12认同)

小智 37

它不完全是zip,但使用Windows工具压缩文件的唯一方法是:

makecab <source> <dest>.cab
Run Code Online (Sandbox Code Playgroud)

要解压缩:

expand <source>.cab <dest>
Run Code Online (Sandbox Code Playgroud)

高级示例(来自ss64.com):

Create a self extracting archive containing movie.mov:
C:\> makecab movie.mov "temp.cab"
C:\> copy /b "%windir%\system32\extrac32.exe"+"temp.cab" "movie.exe"
C:\> del /q /f "temp.cab"
Run Code Online (Sandbox Code Playgroud)

更多信息:makecab,expand,makecab高级用途


Mon*_*nir 29

使用7-Zip:

Zip:你有一个文件夹foo,想把它压缩到myzip.zip

"C:\Program Files\7-Zip\7z.exe" a  -r myzip.zip -w foo -mem=AES256
Run Code Online (Sandbox Code Playgroud)

解压缩:你想将它解压缩myzip.zip到当前目录(./)

"C:\Program Files\7-Zip\7z.exe" x  myzip.zip  -o./ -y -r
Run Code Online (Sandbox Code Playgroud)

  • 请注意这个问题:"无需安装任何第三方" (28认同)
  • @RoeeGavirel 7zip应该是你在任何Windows安装上安装的第一件事之一:P (14认同)
  • @developerbmw - A.为什么?B.我正在处理大约100台生产中没有7zip的机器.要安装它,我必须让DevOps在所有这些机器上以及将添加到集群的所有新机器上安装它.我宁愿避免它. (3认同)

小智 8

我一直在寻找这个确切的问题,根据我的研究,DiryBoy的回答似乎是准确的.

我发现compact.exe程序压缩文件但不创建高度压缩的文件(或文件集).它类似于右键单击Windows中的驱动器号或分区时获得的选项.您可以选择清理(删除临时文件等)以及压缩文件.压缩文件仍然可访问,但只是压缩以在空间不足的驱动器上创建空间.

我还发现了我在计算机上碰巧遇到的compress.exe.它不是大多数Windows机器上的本机,而是2003资源工具包的一部分.它确实创建了一个压缩文件,但它实际上更类似于Windows安装盘中的文件(下划线作为文件扩展名或名称的最后一个字符).并且extract.exe命令提取这些文件.

但是,如果它可以通过GUI本地完成,则可能有一种方法可以通过批处理,.vbs或命令行中的某些其他类型的脚本来完成.由于windows有'send to'选项来创建一个zip文件,我知道必须有一种方法可以通过命令行来完成它,我发现了一些选项.

这是一个很棒的链接,显示如何使用Windows native命令压缩文件.

https://superuser.com/questions/110991/can-you-zip-a-file-from-the-command-prompt-using-only-windows-built-in-capabili

我用包含多个嵌套文件和文件夹的目录测试了它,它运行得很好.只需遵循命令行的格式即可.

还有一种方法可以通过我发现的命令行解压缩文件.一种方法,只需打开一个浏览器窗口,显示压缩文件的内容.其中一些也使用Java,它不一定是Windows的原生,但是很常见,几乎看起来如此.

https://superuser.com/questions/149489/does-windows-7-have-unzip-at-the-command-line-installed-by-default

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


Pod*_*.io 7

您可以使用包含在BAT文件中的vbsscript.此代码适用于相对PATH.

不需要任何第三方工具或依赖项.只是设置SOURCEDIROUTPUTZIP.

filename:ZipUp.bat

echo Set fso = CreateObject("Scripting.FileSystemObject") > _zipup.vbs
echo InputFolder = fso.GetAbsolutePathName(WScript.Arguments.Item(0)) >> _zipup.vbs
echo ZipFile = fso.GetAbsolutePathName(WScript.Arguments.Item(1)) >> _zipup.vbs

' Create empty ZIP file.
echo CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar) >> _zipup.vbs

echo Set objShell = CreateObject("Shell.Application") >> _zipup.vbs
echo Set source = objShell.NameSpace(InputFolder).Items >> _zipup.vbs
echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipup.vbs

echo ' Keep script waiting until compression is done
echo Do Until objShell.NameSpace( ZipFile ).Items.Count = objShell.NameSpace( InputFolder ).Items.Count >> _zipup.vbs
echo     WScript.Sleep 200 >> _zipup.vbs
echo Loop >> _zipup.vbs

CScript  _zipup.vbs  %SOURCEDIR%  %OUTPUTZIP%

del _zipup.vbs
Run Code Online (Sandbox Code Playgroud)

用法示例

SET SOURCEDIR=C:\Some\Path
SET OUTPUTZIP=C:\Archive.zip
CALL ZipUp
Run Code Online (Sandbox Code Playgroud)

或者,您可以参数化通过替换线这个文件CScript _zipup.vbs %SOURCEDIR% %OUTPUTZIP%CScript _zipup.vbs %1 %2,在这种情况下,它可以更加容易地从所谓通过简单地调用CALL ZipUp C:\Source\Dir C:\Archive.zip


edd*_*yoc 5

如果您需要将其作为脚本的一部分来执行,那么最好的方法是使用 Java。假设 bin 目录在您的路径中(大多数情况下),您可以使用命令行:

jar xf test.zip
Run Code Online (Sandbox Code Playgroud)

如果 Java 不在您的路径上,请直接引用它:

C:\Java\jdk1.6.0_03\bin>jar xf test.zip
Run Code Online (Sandbox Code Playgroud)


Seb*_*orr 5

我对所有这些解决方案都有问题。

它们并不完全相同,并且它们创建的文件与RMB --> send to --> compressed (zipped) folder从同一源文件夹创建的文件相比,它们的大小略有不同。我所拥有的最接近的大小差异是 300 KB 差异(脚本 > 手册),由:

powershell Compress-Archive -Path C:\sourceFolder -CompressionLevel Fastest -DestinationPath C:\destinationArchive.zip
Run Code Online (Sandbox Code Playgroud)

(注意-CompressionLevel有三个可能的值:最快、无压缩和最佳,(默认值:最佳))

我想制作一个 .bat 文件,该文件应自动将我正在处理的 WordPress 插件文件夹压缩为 .zip 存档,以便我可以将其上传到 WordPress 站点并测试插件。

但出于某种原因,它不适用于任何这些自动压缩,它确实适用于手动人民币压缩,我觉得很奇怪。

而脚本生成的 .zip 文件实际上将 WordPress 插件破坏到无法激活的程度,也无法从 WordPress 内部删除它们。我必须通过 SSH 连接到服务器的“后端”并手动删除上传的插件文件。而手动RMB生成的文件工作正常。