我有一个输出文本文件的批处理文件。我想如果我也可以将其压缩就好了。
这将在不受控制的环境中使用,因此我无法假设是否存在第三方软件产品,例如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(或更高版本),也会安装它。