在Windows中,你可以压缩一些文件

右键单击→发送到→压缩(压缩)文件夹

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

是否有一种方法可以从脚本(.bat文件)应用这些功能,而不需要安装任何第三方软件?


当前回答

在2013年,这是不可能的。微软没有为此提供任何可执行文件。

看这个链接,一些VBS的方法来做到这一点。 https://superuser.com/questions/201371/create-zip-folder-from-the-command-line-windows

从Windows 8开始,.NET Framework 4.5默认安装,有system . io . compress . ziparchive和PowerShell可用,你可以写脚本来实现这一点,见 https://stackoverflow.com/a/26843122/71312

其他回答

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

jar xf test.zip

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

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

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

它们并不完全相同,当从相同的源文件夹生成时,它们都创建的文件与RMB—> send to—>压缩(压缩)文件夹相比有轻微的大小差异。我有过的最接近的大小差异是300kb的差异(脚本>手册),使用:

powershell Compress-Archive -Path C:\sourceFolder -CompressionLevel Fastest -DestinationPath C:\destinationArchive.zip

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

我想做一个。bat文件,它可以自动将我正在使用的WordPress插件文件夹压缩成。zip文件,这样我就可以把它上传到WordPress站点并测试插件。

但出于某种原因,它不能与任何这些自动压缩,但它可以与手动人民币压缩,我发现真的很奇怪。

脚本生成的。zip文件实际上破坏了WordPress插件,使其无法激活,也不能从WordPress内部删除。我必须SSH到服务器的“后台”,手动删除上传的插件文件。而手动生成的人民币文件正常工作。

它并不是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%\system32\extrac32.exe"+"temp.cab" "movie.exe"
C:\> del /q /f "temp.cab"

更多信息:makecab,扩展,makecab高级用法

使用7 - zip:

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

"C:\Program Files\7-Zip\7z.exe" a  -r myzip.zip -w foo -mem=AES256

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

"C:\Program Files\7-Zip\7z.exe" x  myzip.zip  -o./ -y -r

这是@PodTech.io提供的答案的更新版本

这个版本在批处理文件中正确转义了所有的vbs代码。 它也被创建为一个子例程,可以从批处理脚本中的任何地方用一行来调用:

:: === Main code:

call :ZipUp "C:\Some\Path" "C:\Archive.zip"


:: === SubRoutines:

:ZipUp
::Arguments: Source_folder, destination_zip
(
    echo:Set fso = CreateObject^("Scripting.FileSystemObject"^)
    echo:InputFolder = fso.GetAbsolutePathName^(WScript.Arguments.Item^(0^)^)
    echo:ZipFile = fso.GetAbsolutePathName^(WScript.Arguments.Item^(1^)^)
    echo:
    echo:' Create empty ZIP file.
    echo:CreateObject^("Scripting.FileSystemObject"^).CreateTextFile^(ZipFile, True^).Write "PK" ^& Chr^(5^) ^& Chr^(6^) ^& String^(18, vbNullChar^)
    echo:
    echo:Set objShell = CreateObject^("Shell.Application"^)
    echo:Set source = objShell.NameSpace^(InputFolder^).Items
    echo:objShell.NameSpace^(ZipFile^).CopyHere^(source^)
    echo:
    echo:' Keep script waiting until compression is done
    echo:Do Until objShell.NameSpace^( ZipFile ^).Items.Count = objShell.NameSpace^( InputFolder ^).Items.Count
    echo:    WScript.Sleep 200
    echo:Loop
)>_zipup.vbs
CScript //Nologo _zipup.vbs "%~1" "%~2"
del _zipup.vbs
goto :eof