Aar*_*ush 125 windows zip batch command-line
我有一个输出文本文件的批处理文件。我想如果我也能把它拉上拉链就好了。
这将在不受控制的环境中使用,因此我无法假设是否存在第三方软件产品,例如7-Zip等。这需要使用 Windows 现在内置的功能来压缩文件。
Pet*_*sen 93
这是一个全批处理文件解决方案(我的其他答案的变体),它将压缩一个名为的文件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
Run Code Online (Sandbox Code Playgroud)
需要对存储在TEMPDIR
. 由于通常情况并非如此,驱动器 C 的根目录TEMPDIR
可能需要更改。
.bat
脚本所在的文件夹也需要写访问权限(因为它会在那里生成一个文件)。
另外,请注意压缩文件的文件扩展名必须是.zip
. 尝试使用其他扩展可能会导致脚本错误。相反,生成.zip
文件并重命名它。
Pet*_*sen 41
这是可能的zip文件,无需安装任何额外的软件(我测试)。解决办法是:
在命令行窗口中运行此命令以创建一个名为的 ZIP 文件,C:\someArchive.zip
其中包含文件夹中的所有文件C:\test3
:
CScript zip.vbs C:\test3 C:\someArchive.zip
Run Code Online (Sandbox Code Playgroud)
其中文件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
Run Code Online (Sandbox Code Playgroud)
我还没有针对包含空格的路径和文件名测试过它。如果在命令行参数周围加上引号,它可能会起作用。
它是如何工作的:Windows(Windows XP 及更高版本?)中的内置 zip 功能通过来自 Windows 外壳的COM接口公开,explorer.exe - 即“Shell.Application”部分。可以从VBScript脚本使用此 COM 接口,因为这样的脚本可以访问 COM 组件。为了使脚本完全独立,它会创建一个空的 ZIP 文件以开始使用(也可以创建一个空的 ZIP 文件并将其与 VBScript 脚本一起复制到目标系统)。
自 Windows 98 以来,Microsoft Windows 的每个桌面版本都默认安装了 VBScript。
CScript.exe
是Windows Script Host 的一部分。默认情况下,Windows Script Host 分发并安装在 Windows 98 和更高版本的 Windows 上。如果安装了 Internet Explorer 5(或更高版本),也会安装它。
Bea*_*ner 12
如果您愿意使用PowerShell,则 .NET 2.0 中提供了 zip 功能(PowerShell 是 .NET)。这是Mike Hodnick的一个示例(来源):
########################################################
# out-zip.ps1
#
# Usage:
# To zip up some files:
# ls c:\source\*.txt | out-zip c:\target\archive.zip $_
#
# To zip up a folder:
# gi c:\source | out-zip c:\target\archive.zip $_
########################################################
$path = $args[0]
$files = $input
if (-not $path.EndsWith('.zip')) {$path += '.zip'}
if (-not (test-path $path)) {
set-content $path ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
}
$ZipFile = (new-object -com shell.application).NameSpace($path)
$files | foreach {$zipfile.CopyHere($_.fullname)}
Run Code Online (Sandbox Code Playgroud)
ven*_*mus 11
Windows 10 build 17063 或更高版本与 tar.exe 捆绑在一起,它能够从命令行处理 ZIP 文件。
tar.exe -xf archive.zip
Run Code Online (Sandbox Code Playgroud)
或者创建一个 ZIP 档案:
tar.exe -a -cf Test.zip Test
Run Code Online (Sandbox Code Playgroud)
小智 7
您可以通过轮询压缩对话窗口的存在来消除压缩期间超时的风险。此方法还处理用户取消压缩窗口。
objShell.NameSpace(ZipFile).CopyHere(source)
' Wait for compression window to open
set scriptShell = CreateObject("Wscript.Shell")
Do While scriptShell.AppActivate("Compressing...") = FALSE
WScript.Sleep 500 ' Arbitrary polling delay
Loop
' Wait for compression to complete before exiting script
Do While scriptShell.AppActivate("Compressing...") = TRUE
WScript.Sleep 500 ' Arbitrary polling delay
Loop
Run Code Online (Sandbox Code Playgroud)
为此,有一个简单的 cmd.exe 命令(通过 PowerShell v5.0+)。
压缩:
powershell Compress-Archive -LiteralPath 'C:\mypath\testfile.txt' -DestinationPath "C:\mypath\Test.zip"
Run Code Online (Sandbox Code Playgroud)
解压缩:
powershell Expand-Archive -LiteralPath "C:\mypath\Test.Zip" -DestinationPath "C:\mypath" -Force
Run Code Online (Sandbox Code Playgroud)
资料来源:
特别感谢@Ramhound。
如果您能够安装Resource Kit Tools,您将找到一个名为 COMPRESS 的命令行工具,它可以创建压缩存档文件,如 zip。
Microsoft (R) File Compression Utility Version 5.00.2134.1
Copyright (C) Microsoft Corp. 1990-1999. All rights reserved.
Compresses one or more files.
COMPRESS [-r] [-d] [-z] Source Destination
COMPRESS -r [-d] [-z] Source [Destination]
-r Rename compressed files.
-d Update compressed files only if out of date.
-zx LZX compression.
-z MS-ZIP compression.
-zq[n] Quantum compression and optional level
(in range 1-7, default is 4).
Source Source file specification. Wildcards may be used.
Destination Destination file | path specification.
Destination may be a directory.
If Source is multiple files and -r is not specified,
Destination must be a directory.
Run Code Online (Sandbox Code Playgroud)