在Windows中,你可以压缩一些文件
右键单击→发送到→压缩(压缩)文件夹
双击.zip文件解压缩并解压缩文件。
是否有一种方法可以从脚本(.bat文件)应用这些功能,而不需要安装任何第三方软件?
在Windows中,你可以压缩一些文件
右键单击→发送到→压缩(压缩)文件夹
双击.zip文件解压缩并解压缩文件。
是否有一种方法可以从脚本(.bat文件)应用这些功能,而不需要安装任何第三方软件?
在2013年,这是不可能的。微软没有为此提供任何可执行文件。
看这个链接,一些VBS的方法来做到这一点。 https://superuser.com/questions/201371/create-zip-folder-from-the-command-line-windows
从Windows 8开始,.NET Framework 4.5默认安装,有system . io . compress . ziparchive和PowerShell可用,你可以写脚本来实现这一点,见 https://stackoverflow.com/a/26843122/71312
我一直在寻找这个确切问题的答案,从我的研究来看,DiryBoy的回答似乎是准确的。
我发现compact.exe程序压缩文件,但不创建高度压缩的文件(或一组文件)。它类似于在Windows中右键单击驱动器号或分区时得到的选项。您可以选择进行清理(删除临时文件等)以及压缩文件。压缩文件仍然可以访问,但只是压缩以在空间不足的驱动器上创建空间。
我还在电脑上找到了compress.exe。它不是大多数windows机器上的本机,而是2003年资源包的一部分。它确实生成了某种压缩文件,但它实际上更类似于windows安装磁盘中的文件(文件扩展名或名称的最后一个字符是下划线)。exe命令提取这些文件。
然而,关键是,如果可以通过GUI本机完成,那么很可能有一种方法可以通过批处理、.vbs或命令行中的其他类型的脚本来完成。由于windows有“发送到”选项来创建zip文件,我知道一定有一种方法可以通过命令行来完成,我找到了一些选项。
这里有一个很好的链接,展示了如何使用windows本机命令压缩文件。
https://superuser.com/questions/110991/can-you-zip-a-file-from-the-command-prompt-using-only-windows-built-in-capabili
我用一个包含多个嵌套文件和文件夹的目录对它进行了测试,效果非常好。只需遵循命令行的格式。
还有一种通过命令行解压文件的方法,我也发现了。一种方法是打开一个资源管理器窗口,显示压缩文件的内容。其中一些也使用Java,它不一定是windows本机的,但它是如此常见,几乎看起来是这样的。
https://superuser.com/questions/149489/does-windows-7-have-unzip-at-the-command-line-installed-by-default
如何使用命令行解压缩文件?
为了扩展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。
如果您需要将此作为脚本的一部分,那么最好的方法是使用Java。假设bin目录在你的路径中(在大多数情况下),你可以使用命令行:
jar xf test.zip
如果Java不在你的路径上,直接引用它:
C:\Java\jdk1.6.0_03\bin>jar xf test.zip
如果你安装了Java,你可以使用jar命令压缩成ZIP文件:
jar -cMf targetArchive.zip sourceDirectory
创建一个新的归档文件。 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高级用法
使用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
你可以在BAT文件中使用VBScript脚本。这段代码在相对PATH上工作。
不需要任何第三方工具或依赖项。只需设置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 _zip行来参数化该文件。使用CScript _zip . vbs %SOURCEDIR% %OUTPUTZIP%vbs %1 %2,在这种情况下,通过调用CALL ZipUp C:\Source\Dir C:\Archive.zip可以更容易地调用它。
PowerShell 5.0
从Microsoft.PowerShell.Archive可以使用:
Compress-Archive Expand-Archive
例如:
从整个Test文件夹中创建result.zip: 压缩文件路径C:\Test -DestinationPath C:\result 在指定的Test文件夹中提取result.zip的内容: 扩展-归档-路径result.zip -目的地路径C:\Test .zip
我对所有这些解决方案都有疑问。
它们并不完全相同,当从相同的源文件夹生成时,它们都创建的文件与RMB—> send to—>压缩(压缩)文件夹相比有轻微的大小差异。我有过的最接近的大小差异是300kb的差异(脚本>手册),使用:
powershell Compress-Archive -Path C:\sourceFolder -CompressionLevel Fastest -DestinationPath C:\destinationArchive.zip
(注意-CompressionLevel。有三个可能的值:最快,无压缩和最佳,(默认值:最佳))
我想做一个。bat文件,它可以自动将我正在使用的WordPress插件文件夹压缩成。zip文件,这样我就可以把它上传到WordPress站点并测试插件。
但出于某种原因,它不能与任何这些自动压缩,但它可以与手动人民币压缩,我发现真的很奇怪。
脚本生成的。zip文件实际上破坏了WordPress插件,使其无法激活,也不能从WordPress内部删除。我必须SSH到服务器的“后台”,手动删除上传的插件文件。而手动生成的人民币文件正常工作。
这是@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
加上@Jason Duffett的回答及其注释,这里有一个脚本,从用户那里获得输入和输出(分别是文件名和目录名):
@echo off
set input=%1
set output=%2
powershell.exe "Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('%input%', '%output%');"
用法:
unzip.bat path\to\file.zip path\to\output\directory
壳。应用程序
与壳牌。应用程序可以模拟explorer.exe压缩文件和文件夹的方式 脚本名为zipjs.bat:
:: unzip content of a zip to given folder.content of the zip will be not preserved (-keep no).Destination will be not overwritten (-force no)
call zipjs.bat unzip -source C:\myDir\myZip.zip -destination C:\MyDir -keep no -force no
:: lists content of a zip file and full paths will be printed (-flat yes)
call zipjs.bat list -source C:\myZip.zip\inZipDir -flat yes
:: lists content of a zip file and the content will be list as a tree (-flat no)
call zipjs.bat list -source C:\myZip.zip -flat no
:: prints uncompressed size in bytes
zipjs.bat getSize -source C:\myZip.zip
:: zips content of folder without the folder itself
call zipjs.bat zipDirItems -source C:\myDir\ -destination C:\MyZip.zip -keep yes -force no
:: zips file or a folder (with the folder itslelf)
call zipjs.bat zipItem -source C:\myDir\myFile.txt -destination C:\MyZip.zip -keep yes -force no
:: unzips only part of the zip with given path inside
call zipjs.bat unZipItem -source C:\myDir\myZip.zip\InzipDir\InzipFile -destination C:\OtherDir -keep no -force yes
call zipjs.bat unZipItem -source C:\myDir\myZip.zip\InzipDir -destination C:\OtherDir
:: adds content to a zip file
call zipjs.bat addToZip -source C:\some_file -destination C:\myDir\myZip.zip\InzipDir -keep no
call zipjs.bat addToZip -source C:\some_file -destination C:\myDir\myZip.zip
MAKECAB
Makecab是windows自带的默认压缩工具。虽然它可以使用不同的压缩算法(包括zip)文件格式始终是.cab文件。通过一些扩展,它也可以在linux机器上使用。
压缩文件:
makecab file.txt "file.cab"
压缩整个文件夹需要更多的工作。这里用cabDir.bat压缩了一个目录:
call cabDir.bat ./myDir compressedDir.cab
使用expand命令解压非常简单:
EXPAND cabfile -F:* .
更巧妙的方法是使用extrac32命令创建自提取可执行文件:
copy /b "%windir%\system32\extrac32.exe"+"mycab.cab" "expandable.exe"
call expandable.exe
TAR
在windows的17063版本中,我们有tar命令:
::compress directory
tar -cvf archive.tar c:\my_dir
::extract to dir
tar -xvf archive.tar.gz -C c:\data
net工具
.net(和powershell)提供了许多压缩和解压缩文件的方法。最直接的是gzip流。脚本名为gzipjs.bat:
::zip
call gzipjs.bat -c my.file my.zip
::unzip
call gzipjs.bat -u my.zip my.file
更新的windows版本包括tar.exe。 Tar.exe可用于CMD或Windows批处理文件中。
//Compress a folder:
tar -caf aa.zip c:\aa
我发现了一种方法来解压缩压缩文件与批处理文件:
@echo off
::unziper
set /p zip=zip:
powershell -Command "Expand-Archive %zip%"
echo done
pause
我把这个贴出来,以防有人需要。 你为什么要修改我的答案?
正如@Noam Manos所回答的,我们可以通过在.bashrc文件中使用别名来改进压缩:
别名zip=“jar -cMf”
然后命令(在bash终端中)将是
邮编目标.zip目录1 目录2
注意:你应该安装java和git bash,并在windows中进行安装。
可以使用此命令压缩整个文件夹及其子文件夹
/c /s " c:\Temp\my_folder" /I /Q
来解压
compact /u /s:"C:\Temp\my_folder" /I /Q
c代表压缩,u代表解压