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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Windows的内置功能从脚本中压缩或解压缩?相关的知识,希望对你有一定的参考价值。

在Windows中,你可以通过zip一些文件

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

unzip双击.zip文件并解压缩文件。

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

答案

早在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,可以编写脚本来实现这一点,请参阅https://stackoverflow.com/a/26843122/71312

另一答案

开源是你的朋友:-)

这是UNZIP:http://gnuwin32.sourceforge.net/packages/unzip.htm

还有一个ZIP命令:http://gnuwin32.sourceforge.net/packages/zip.htm

二进制文件下载就足够了。

另一答案

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

jar xf test.zip

如果Java不直接在您的传递引用上:

C:Javajdk1.6.0_03in>jar xf test.zip
另一答案

你说你没有第三方软件就试图这样做。我不确定你是否认为.NET是“第三方”软件。

但您可以在.NET中创建自己的命令行实用程序。它不应该需要多行代码。

https://msdn.microsoft.com/en-us/library/system.io.compression.zipfile(v=vs.110).aspx

另一答案

您可以使用Expand命令解压缩压缩或本机压缩的Windows文件,例如

expand MyFile.zip myFile
另一答案

压缩文件:

C:> zip -9 -m -o file.dat.zip file.dat
  • -9最大压缩
  • -m成功压缩后删除原始文件
  • -o设置zip文件的修改日期与原始文件相同
  • 太糟糕的一个必须给它所需的zip文件的名称而不是它只是添加.zip扩展名称压缩文件
另一答案

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

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

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

另一答案

.NET 4.5开始,PowerShell可以这样做:

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

对于最后两行,barfoo可以替换为您希望文件夹具有的名称,或者替换为预先存在的文件夹的名称。在两种情况下,foo.zip都充当zip文件,要么保存为解压缩,要么解压缩。

另一答案

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

jar -cMf targetArchive.zip sourceDirectory

c =创建新的存档文件。

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

f =表示目标文件名。

另一答案

PowerShell 5.0

Microsoft.PowerShell.Archive您可以使用:

Ef。:

  • 从整个result.zip文件夹创建TestCompress-Archive -Path C:Test -DestinationPath C: esult
  • 在指定的result.zip文件夹中提取Test的内容: Expand-Archive -Path result.zip -DestinationPath C:Test
另一答案

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

makecab <source> <dest>.cab

要解压缩:

expand <source>.cab <dest>

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

Create a self extracting archive containing movie.mov:
C:> makecab movie.mov "temp.cab"
C:> copy /b "%windir%system32extrac32.exe"+"temp.cab" "movie.exe"
C:> del /q /f "temp.cab"

更多信息:makecabexpandmakecab advanced uses

另一答案

使用7-Zip:

Zip:你有一个文件夹foo,并希望将其压缩到myzip.zip

"C:Program Files7-Zip7z.exe" a  -r myzip.zip -w foo -mem=AES256

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

"C:Program Files7-Zip7z.exe" x  myzip.zip  -o./ -y -r
另一答案

我一直在寻找这个确切的问题,根据我的研究,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

How to unzip a file using the command line?

另一答案

您可以使用包含在BAT文件中的vbscript。此代码适用于相对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

以上是关于如何使用Windows的内置功能从脚本中压缩或解压缩?的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中压缩或枚举?

如何在Mac中压缩文件

我可以在 JavaScript 中压缩数据吗?

如何在 flyway 中压缩/合并迁移

在Windows上使用perl脚本而不安装ActivePerl?

如何zstd从输入文件中压缩一大块字节?