在Windows中,您可以通过
右键单击→ 发送到 → 压缩(压缩)文件夹
然后双击.zip
文件解压缩并解压缩文件。
有没有一种方法可以从脚本(.bat文件)中应用这些功能,而无需安装任何第三方软件?
在Windows中,您可以通过
右键单击→ 发送到 → 压缩(压缩)文件夹
然后双击.zip
文件解压缩并解压缩文件。
有没有一种方法可以从脚本(.bat文件)中应用这些功能,而无需安装任何第三方软件?
Answers:
早在2013年,那是不可能的。Microsoft没有为此提供任何可执行文件。
请参阅此链接以了解某些VBS方式。 /superuser/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
要扩展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。
'.'
,例如:powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', '.'); }"
& {}
什么?使用PS5时也可以使用:powershell.exe -nologo -noprofile -command "Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', '.');"
作为 .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')
对于最后两行,bar
并且foo
可以替换为您希望文件夹具有的名称,或者使用现有文件夹的名称。foo.zip
在这两种情况下,该zip文件都可以另存为或解压缩。
如果安装了Java,则可以使用以下jar
命令压缩为ZIP归档文件:
jar -cMf targetArchive.zip sourceDirectory
c =创建一个新的存档文件。
M =指定清单文件不应添加到存档中。
f =指示目标文件名。
从Microsoft.PowerShell.Archive
您可以使用:
例如:
result.zip
从整个Test
文件夹创建:
Compress-Archive -Path C:\Test -DestinationPath C:\result
提取result.zip
指定Test
文件夹中的内容:
Expand-Archive -Path result.zip -DestinationPath C:\Test
powershell Compress-Archive -Path C:\SomeFile.ext -DestinationPath C:\SomeFile.zip
从命令行直接使用而不需要编写脚本(假设您已经安装了Powershell v5,至少可以返回Windows 7)。
它并非完全是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,expand,makecab的高级用法
使用7-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
without the need to install any 3rd party
我一直想回答这个确切的问题,根据我的研究,DiryBoy的回答似乎很准确。
我发现compact.exe程序可以压缩文件,但不能创建高度压缩的文件(或文件集)。它类似于在Windows中右键单击驱动器号或分区时所获得的选项。您可以选择进行清理(删除临时文件等)以及压缩文件。压缩文件仍可访问,但仅被压缩以在驱动器上创建空间不足的空间。
我还发现我的计算机上确实有compress.exe。它不是大多数Windows计算机上的本机,而是2003资源工具包的一部分。它的确压缩了各种压缩文件,但实际上与Windows安装盘中的文件更相似(下划线是文件扩展名或名称的最后一个字符)。然后extract.exe命令提取这些文件。
但是,口头禅是,如果可以通过GUI本机完成,那么很可能有一种方法可以通过批处理,.vbs或命令行中的某些其他类型的脚本来完成。由于Windows具有创建zip文件的“发送至”选项,因此我知道必须有一种通过命令行执行此操作的方法,并且发现了一些选项。
这是一个很棒的链接,显示了如何使用Windows本机命令压缩文件。
/superuser/110991/can-you-zip-a-file-from-the-command-prompt-using-only-windows-built-in-capabili
我用一个包含多个嵌套文件和文件夹的目录对其进行了测试,它运行良好。只需遵循命令行格式即可。
我也找到了一种通过命令行解压缩文件的方法。一种方法是,打开浏览器窗口,显示压缩文件的内容。其中一些还使用Java,而Java不一定是Windows固有的,却是如此普遍,以至于看起来几乎是这样。
/superuser/149489/does-windows-7-have-unzip-at-the-command-line-installed-by-default
您可以使用包装在BAT文件中的VBScript脚本。此代码适用于相对路径。
不需要任何第三方工具或依赖项。只需设置SOURCEDIR
和OUTPUTZIP
。
档案名称: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
echo Loop >> _zipup.vbs
CScript _zipup.vbs %SOURCEDIR% %OUTPUTZIP%
del _zipup.vbs
用法示例
SET SOURCEDIR=C:\Some\Path
SET OUTPUTZIP=C:\Archive.zip
CALL ZipUp
另外,您也可以通过更换线参数化这个文件CScript _zipup.vbs %SOURCEDIR% %OUTPUTZIP%
用CScript _zipup.vbs %1 %2
,在这种情况下,可以通过简单地调用更加容易叫从CALL ZipUp C:\Source\Dir C:\Archive.zip
。
我对所有这些解决方案都有疑问。
它们并不完全相同,而且它们创建的文件与RMB --> send to --> compressed (zipped) folder
从同一源文件夹制作的文件相比,它们的大小略有不同。我拥有的最接近的大小差异是300 KB差异(脚本>手册),其使用方式为:
powershell Compress-Archive -Path C:\sourceFolder -CompressionLevel Fastest -DestinationPath C:\destinationArchive.zip
(请注意-CompressionLevel。有三个可能的值:Fastest,NoCompression&Optimal(默认:Optimal))
我想制作一个.bat文件,该文件应自动将正在处理的WordPress插件文件夹压缩为.zip存档,以便将其上载到WordPress网站并测试该插件。
但是由于某种原因,它不适用于任何这些自动压缩,但是可以用于手动的RMB压缩,我发现这真的很奇怪。
脚本生成的.zip文件实际上将WordPress插件破坏到无法激活的地步,也无法从WordPress内部删除它们。我必须通过SSH进入服务器的“背面”,并手动删除上传的插件文件本身。手动生成的人民币文件可以正常工作。
开源是您的朋友:-)
这是解压缩文件:http : //gnuwin32.sourceforge.net/packages/unzip.htm
也有一个ZIP命令:http : //gnuwin32.sourceforge.net/packages/zip.htm
该二进制文件下载就足够了。
这是@ 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
要压缩文件:
C:\> zip -9 -m -o file.dat.zip file.dat
您可以使用Expand命令解压缩压缩的或本地压缩的Windows文件,例如
expand MyFile.zip myFile
Expand file.zip file
只是将zip复制到另一个没有扩展名的文件中。它不会将ZIP解压缩到文件夹中。