在Windows中,您可以通过以下方式压缩一些文件:
右键单击 → 发送到 → 压缩 (zipped) 文件夹
并且通过双击 .zip
文件来解压缩并提取文件。
有没有一种方法可以通过脚本(.bat 文件)来应用这些功能而不需要安装任何第三方软件?
在Windows中,您可以通过以下方式压缩一些文件:
右键单击 → 发送到 → 压缩 (zipped) 文件夹
并且通过双击 .zip
文件来解压缩并提取文件。
有没有一种方法可以通过脚本(.bat 文件)来应用这些功能而不需要安装任何第三方软件?
为了进一步扩展Steven Penny的PowerShell解决方案,您可以通过像这样调用powershell.exe
将其合并到批处理文件中:
要扩展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', '.'); }"
。请注意,这不会改变原来的意思。 - Munchkin& {}
的目的是什么?在 PS5 中,这也可以工作:powershell.exe -nologo -noprofile -command "Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', '.');"
- Roi Dantonjar
命令将文件压缩为ZIP存档文件:jar -cMf targetArchive.zip sourceDirectory
c = 创建一个新的压缩文件。
M = 指定不将清单文件添加到压缩文件中。
f = 表示目标文件名。
您可以使用Microsoft.PowerShell.Archive
中的以下命令:
例如:
创建来自整个Test
文件夹的result.zip
:
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)。 - Beems回到2013年,这是不可能的。微软没有提供任何可执行文件来完成这项任务。
参考此链接以了解一些使用VBS的方法。 https://superuser.com/questions/201371/create-zip-folder-from-the-command-line-windows
从Windows 8开始,默认安装了.NET Framework 4.5,配备有System.IO.Compression.ZipArchive和PowerShell,可以编写脚本来实现此功能,请参见 https://dev59.com/f2Mm5IYBdhLWcg3whfWe#26843122
虽然不是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
-w
开关,临时基本存档将在同一目录中,那么使用-w
与不使用该开关相比有什么好处呢? - Roland您可以使用包装在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
即可更轻松地调用它。
这是一个很棒的链接,展示了如何使用Windows原生命令压缩文件。
我用一个包含多个嵌套文件和文件夹的目录进行了测试,它完美地工作了。只需按照命令行的格式进行操作即可。如果你需要在脚本的一部分中进行此操作,最好的方法是使用Java。假设bin目录在您的路径中(在大多数情况下),您可以使用命令行:
jar xf test.zip
如果Java不在您的路径上,请直接引用它:
C:\Java\jdk1.6.0_03\bin>jar xf test.zip
我对所有这些解决方案都有问题。
它们并不完全相同,并且它们所创建的文件与从同一源文件夹制作的RMB --> 发送到 --> 压缩(zipped)文件夹
相比存在轻微的大小差异。我遇到的最接近的大小差异是300 KB(脚本 > 手动),使用以下方法制作:
powershell Compress-Archive -Path C:\sourceFolder -CompressionLevel Fastest -DestinationPath C:\destinationArchive.zip
(注意 -CompressionLevel. 有三个可能的值: Fastest, NoCompression 和 Optimal (默认值: Optimal))
我想制作一个批处理文件,可以自动压缩我正在开发中的 WordPress 插件文件夹为 .zip 文件,这样我就可以将其上传到 WordPress 网站并测试插件。
但是由于某些原因,它无法使用任何自动压缩选项,但是它可以使用手动右键菜单压缩,这让我感到非常奇怪。
而且脚本生成的 .zip 文件实际上破坏了 WordPress 插件,以至于它们无法被激活,并且也无法从 WordPress 中删除。我必须通过 SSH 进入服务器的“后端”并手动删除上传的插件文件,而手动右键菜单生成的文件则可以正常工作。