您能否仅使用 Windows 内置的压缩​​文件功能从命令提示符压缩文件?

您能否仅使用 Windows 内置的压缩​​文件功能从命令提示符压缩文件?

我有一个输出文本文件的批处理文件。我想如果我也可以将其压缩就好了。

这将在不受控制的环境中使用,因此我无法假设是否存在第三方软件产品,例如7-Zip等。这需要使用 Windows 现在内置的压缩​​文件功能。

答案1

这是一个全批处理文件解决方案(我的其他答案的变体),它将压缩一个名为的文件c:\ue_english.txt并将其放入C:\someArchive.zip

set FILETOZIP=c:\ue_english.txt

set TEMPDIR=C:\temp738
rmdir %TEMPDIR%
mkdir %TEMPDIR%
xcopy /s %FILETOZIP% %TEMPDIR%

echo Set objArgs = WScript.Arguments > _zipIt.vbs
echo InputFolder = objArgs(0) >> _zipIt.vbs
echo ZipFile = objArgs(1) >> _zipIt.vbs
echo CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar) >> _zipIt.vbs
echo Set objShell = CreateObject("Shell.Application") >> _zipIt.vbs
echo Set source = objShell.NameSpace(InputFolder).Items >> _zipIt.vbs
echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipIt.vbs
echo wScript.Sleep 2000 >> _zipIt.vbs

CScript  _zipIt.vbs  %TEMPDIR%  C:\someArchive.zip

pause

需要对存储在 中的文件夹的父级具有写访问权限TEMPDIR。由于这通常不是驱动器 C 的根目录的情况,TEMPDIR因此可能必须更改。

脚本所在的文件夹也需要写访问权限.bat(因为它在那里生成文件)。

另外,请注意压缩文件的文件扩展名必须是.zip。尝试使用其他扩展名可能会导致脚本错误。请生成文件.zip并重命名。

答案2

Windows 10 build 17063 或更高版本与 tar.exe 捆绑在一起,它可以从命令行处理 ZIP 文件。

tar.exe -xf archive.zip

或者创建一个 ZIP 档案:

tar.exe -a -cf Test.zip Test

答案3

无需安装任何附加软件即可压缩文件(我已经测试过了)。解决方案是:

在命令行窗口中运行此命令以创建一个名为的 ZIP 文件,其中C:\someArchive.zip包含文件夹中的所有文件C:\test3

CScript  zip.vbs  C:\test3  C:\someArchive.zip

其中文件zip.vbs包含:

' Get command-line arguments.
Set objArgs = WScript.Arguments
Set FS = CreateObject("Scripting.FileSystemObject")
InputFolder = FS.GetAbsolutePathName(objArgs(0))
ZipFile = FS.GetAbsolutePathName(objArgs(1))

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

Set objShell = CreateObject("Shell.Application")

Set source = objShell.NameSpace(InputFolder).Items

objShell.NameSpace(ZipFile).CopyHere(source)

' Required to let the ZIP command execute
' If this script randomly fails or the ZIP file is not complete,
' just increase to more than 2 seconds
wScript.Sleep 2000

我还没有测试过路径和文件名是否包含空格。如果在命令行参数两边加上引号,它可能会起作用。


工作原理:Windows(Windows XP 及更高版本?)中的内置 zip 功能通过以下方式公开:串口Windows shell explorer.exe 的接口 - 即“Shell.Application”部分。此 COM 接口可从VB脚本脚本,因为这样的脚本可以访问 COM 组件。为了使脚本完全独立,它会创建一个空的 ZIP 文件来开始(也可以创建一个空的 ZIP 文件并将其与 VBScript 脚本一起复制到目标系统)。

自 Windows 98 以来,VBScript 已默认安装在 Microsoft Windows 的每个桌面版本中。

CScript.exe是其一部分Windows 脚本宿主。Windows Script Host 在 Windows 98 及更高版本的 Windows 中默认分发和安装。如果安装了 Internet Explorer 5(或更高版本),也会安装它。

答案4

有一个简单的 cmd.exe 命令可用于此(通过 PowerShell v5.0+)。

压缩:

powershell Compress-Archive -LiteralPath 'C:\mypath\testfile.txt' -DestinationPath "C:\mypath\Test.zip"

解压缩:

powershell Expand-Archive -LiteralPath "C:\mypath\Test.Zip" -DestinationPath "C:\mypath" -Force

资料来源:

特别感谢@Ramhound。

相关内容