你怎样才能使用Windows的内置function压缩或解压缩脚本?
在Windows中,你可以zip
一些文件
右键单击 – >发送到 – >压缩(压缩)文件夹
双击.zip
文件并unzip
文件。
有没有办法从脚本(.bat文件)应用这些能力, 而不需要安装任何第三方 ?
================================================== =
这个问题被编辑,以符合网站的规则, 请重新打开 。
早在2013年,这是不可能的。 MS没有为此提供可执行文件。
看到这个链接一些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://stackoverflow.com/a/26843122/71312
要扩展Steven Penny的PowerShell解决scheme,可以通过调用powershell.exe将它合并到batch file中,如下所示:
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可以做到这一点
Add-Type -A System.IO.Compression.FileSystem [IO.Compression.ZipFile]::CreateFromDirectory('foo', 'foo.zip') [IO.Compression.ZipFile]::ExtractToDirectory('foo.zip', 'bar')
如果您安装了Java ,则可以使用jar命令将其压缩为ZIP存档:
jar -cMf targetArchive.zip sourceDirectory
c =创build一个新的档案文件。
M =指定不应将清单文件添加到存档。
f =表示目标文件名称。
这不完全是一个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 , 扩展 , makecab高级用途
PowerShell 5.0
从Microsoft.PowerShell.Archive
你可以使用:
-
Compress-Archive
-
Expand-Archive
例如:
-
从整个
Test
文件夹创buildresult.zip
:Compress-Archive -Path C:\Test -DestinationPath C:\result
-
在指定的
Test
文件夹中提取result.zip
的内容:Expand-Archive -Path result.zip -DestinationPath C:\Test
我一直在寻找回答这个确切的问题,从我的研究,DiryBoy的回应似乎是准确的。
我发现compact.exe程序压缩文件,但不创build一个高度压缩文件(或一组文件)。 这与在Windows中右键单击驱动器号或分区时所得到的选项类似。 你可以select做清理(删除临时文件等)以及压缩文件。 压缩的文件仍然可以访问,但只是压缩在空间不足的驱动器上创build空间。
我也发现了我的电脑上碰到的compress.exe。 它在大多数Windows机器上不是本地的,并且是2003资源工具包的一部分。 它确实做了一个压缩的文件,但它实际上更类似于Windows安装盘(具有下划线作为文件扩展名或文件名的最后一个字符)中的文件。 extract.exe命令提取这些文件。
然而,如果可以通过GUI本地完成,那么可能有办法通过批处理,.vbs或命令行中的其他types的脚本来完成。 由于Windows有'发送到'选项来创build一个zip文件,我知道必须有一种方法来通过命令行,我发现一些选项。
这是一个很好的链接,展示了如何使用windows native命令压缩文件。
我testing了一个包含多个嵌套文件和文件夹的目录,它的工作完美。 只需按照命令行的格式。
还有一种方法可以通过我发现的命令行来解压文件。 一种方法是打开一个资源pipe理器窗口,显示压缩文件的内容。 其中一些也使用Java,它不一定是Windows本地的,但是很常见,几乎看起来如此。
如何使用命令行解压文件?
使用7-Zip:
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
开源是你的朋友:-)
这里是UNZIP: http : //gnuwin32.sourceforge.net/packages/unzip.htm
还有一个ZIP命令: http : //gnuwin32.sourceforge.net/packages/zip.htm
二进制文件下载就足够了。
你可以使用包装在BAT文件中的vbsscript …这是我的代码在相对path上工作…
无需任何第三方工具或依赖..只需设置源和目的地。
文件名:zipping.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
如果您需要将其作为脚本的一部分,那么最好的方法就是使用Java。 假设bin目录在您的path中(在大多数情况下),您可以使用命令行:
jar xf test.zip
如果Java不是直接传递给你的参考:
C:\Java\jdk1.6.0_03\bin>jar xf test.zip
你说你没有第三方软件就可以做到这一点。 我不确定您是否将.NET视为“第三方”软件。
但是你可以在.NET中创build你自己的命令行工具。 它不应该需要超过几行代码。
https://msdn.microsoft.com/en-us/library/system.io.compression.zipfile(v=vs.110).aspx
您可以使用Expand命令解压缩压缩或原生压缩的Windows文件,例如
expand MyFile.zip myFile
压缩文件:
C:\> zip -9 -m -o file.dat.zip file.dat
- -9最大压缩
- -m在成功压缩后删除原始文件
- -o将zip文件的修改date设置为与原始文件相同
- 太糟糕了,必须给它所需的压缩文件的名称,而不是它只是添加.zip扩展名的文件来压缩