creating batch script to unzip a file without additional zip tools
我正在尝试为Windows 7 x64创建.bat脚本来创建一个文件夹,将文件解压缩到该文件夹中,而不必使用其他附加组件,例如7zip或解压缩。 一直在搜索,并且好像Windows没有内置命令可轻松解压缩。 我可以在没有其他插件的情况下解压缩/扩展文件吗?
-
可以使用jsscript / wbscript robvanderwoude.com/vbstech_files_zip.php制作,最终与-bat文件混合。
-
在不使用任何外部工具的情况下,如何使用批处理文件来压缩(/ zip)和解压缩(/ unzip)文件和文件夹的可能重复项?
-
Windows是否具有命令行的内置ZIP命令?
尝试这个:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| @echo off
setlocal
cd /d %~dp0
Call :UnZipFile"C:\Temp""c:\path\to\batch.zip"
exit /b
:UnZipFile <ExtractTo> <newzipfile>
set vbs="%temp%\_.vbs"
if exist %vbs% del /f /q %vbs%
>%vbs% echo Set fso = CreateObject("Scripting.FileSystemObject")
>>%vbs% echo If NOT fso.FolderExists(%1) Then
>>%vbs% echo fso.CreateFolder(%1)
>>%vbs% echo End If
>>%vbs% echo set objShell = CreateObject("Shell.Application")
>>%vbs% echo set FilesInZip=objShell.NameSpace(%2).items
>>%vbs% echo objShell.NameSpace(%1).CopyHere(FilesInZip)
>>%vbs% echo Set fso = Nothing
>>%vbs% echo Set objShell = Nothing
cscript //nologo %vbs%
if exist %vbs% del /f /q %vbs% |
调整
要使它对每个zip文件执行解压缩,从而为每次使用创建一个文件夹:
1 2 3 4 5 6 7
| @echo off
setlocal
cd /d %~dp0
for %%a in (*.zip) do (
Call :UnZipFile"C:\Temp\%%~na""c:\path\to\%%~nxa"
)
exit /b |
如果您不希望它为每个zip创建一个文件夹,请更改
Call :UnZipFile"C:\Temp\%%~na\""c:\path\to\%%~nxa"至
Call :UnZipFile"C:\Temp\""c:\path\to\%%~nxa"
-
嘿,谢谢。但是该脚本只是复制了文件。它从未展开过拉链。
-
请解释。我已经对此进行了彻底的测试,并且可以正常工作。就我而言,batch.zip中有3个文件,运行此文件时,它将这3个文件提取到C: Temp。您看到什么行为?
-
现在我开始工作了。错误是我将zip文件放在C: Temp Packages theZipFile.zip中,我可以做些什么更改使其将文件夹中的所有文件解压缩,例如Packages文件夹中的所有zip文件,我可能有两个zip文件。 zip1.zip,zip2.zip。
-
查看最新答案
-
我试图找到一个很好的网站来深入了解vbscripts和批处理。你能提供一个吗?
-
这是一对可以帮助您入门的信息。 dostips和Rob Vanderwoudes批处理页面具有所有脚本语言。
-
这也可以使用.7z格式吗?我有一些文件名也以日期结尾的文件。我是否可以仅使用前15个字符来解压缩以定义要解压缩的文件?
-
不,此方法不适用于.7z文件。这些是7zip程序专有的。您可以使用7zip命令行来执行此操作,但是这要求在不符合原始帖子要求的机器上安装7zip。我建议根据您的要求发布一个新问题。
-
@MattWilliamson是否可以在不显示任何UI或没有任何提示的情况下进行解压缩?默认情况下应覆盖。
-
如果使用多个* .zip调用,请确保从zip文件所在的文件夹中运行脚本。
-
感谢您分享。在我的900个zip文件中效果很好
-
@Peter Horsbll Mller不客气。我很高兴它对您有所帮助。
-
@MattWilliamson"这些是7zip程序的专有。" 7z不是专有格式。
-
我在_.vbs(6,1)行中收到required object错误,因此我猜想CreateObject会以某种方式静默失败。我在这里可能会犯任何新手错误吗?
-
@Yasammez您使用的是哪个Windows版本?您是管理员吗?是否有任何原因可能会通过组策略或其他方式阻止vbscript?告诉我您的确切代码。在代码中使用反引号,例如@echo off setlocal cd d %~dp0 Call :UnZipFile"C:\Temp""c:\path\to\batch.zip" exit b
-
是否修改过以自动覆盖任何文件?提前致谢 :)
-
如何传递参数,我想提取多个zip文件,我不想一直编辑批处理脚本,请帮忙
-
每次运行时获取一个名为echo的空文件,以提取一个zip文件夹。通过在我的cmd文件的末尾添加if exist"%~dp0echo" del f q"%~dp0echo"来解决。
-
顺便提及,VBA可以使用相同的代码:Dim o, z:Set o=CreateObject("Shell.Application"):Set z=o.Namespace(zipFile).items:o.Namespace(destFolder).CopyHere(z):Set o=Nothing其中zipFile是完整路径和zip文件名,destFolder是目标路径,例如x:\myPath\ 。
如果您具有PowerShell 5.0或更高版本(已预安装Windows 10和Windows Server 2016):
1
| powershell Expand-Archive your.zip -DestinationPath your_destination |
这是使用PowerShell的快速??简单的解决方案:
1
| powershell.exe -nologo -noprofile -command"& { $shell = New-Object -COM Shell.Application; $target = $shell.NameSpace('C:\extractToThisDirectory'); $zip = $shell.NameSpace('C:\extractThis.zip'); $target.CopyHere($zip.Items(), 16); }" |
这将使用资源管理器的内置提取功能,还将显示典型的提取进度窗口。第二个参数16至CopyHere回答为yes。
-
需要一些帮助。不起作用:您不能在空值表达式上调用方法。在第1行:char:205 + ... Creat Downloads autoduel.zip); $ target.CopyHere($ zip.Items(),16); } + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + CategoryInfo:InvalidOperation:(:) [],RuntimeException + FullyQualifiedErrorId :InvokeMethodOnNull
-
这听起来好像未定义$target(也许路径不存在?)。在cmd窗口中手动尝试命令,并确保路径存在。
-
对不起,我不是那么擅长技术。我在cmd中键入$ target,它说它不被识别为命令
-
我的意思不是键入$ target,而是键入整个命令powershell.exe -nologo -noprofile -command"& { $shell = New-Object -COM Shell.Application; $target = $shell.NameSpace(C:\extractToThisDirectory); $zip = $shell.NameSpace(C:\extractThis.zip); $target.CopyHere($zip.Items(), 16); }",并用路径替换C: extractToThisDirectory和C: extractThis.zip。如果这不起作用,则可能是这两个路径之一是错误的。
-
我将目录固定为%USERPROFILE%。 我不再遇到错误,但是似乎没有解压缩文件。 之后,我检查了目录,但在Google Drive / Duel Links文件夹中看不到Assembly-CSharp.dll。powershell.exe -nologo -noprofile -command"&{$ shell = New-Object -COM Shell.Application; $ target = $ shell.NameSpace(%USERPROFILE% Google Drive Duel链接); $ zip = $ shell.NameSpace(%USERPROFILE% Downloads autoduel.zip); $ target.CopyHere($ zip.Items(),16);}"
-
我意识到这与代码本身无关。 该zip文件已损坏,因为我尝试在要求身份验证用户名/密码的网站上使用下载命令来调用webrequest
这是有关Windows内置的zi / unzip(压缩/解压缩)功能的概述-如何在不使用任何外部工具的情况下使用批处理文件压缩(/ zip)和解压缩(/ unzip)文件和文件夹?
要解压缩文件,您可以使用以下脚本:
1
| zipjs.bat unzip -source C:\myDir\myZip.zip -destination C:\MyDir -keep yes -force no |
解决此问题的另一种方法是使用诸如winzip之类的东西创建一个自解压可执行文件(.exe),并将其用作安装矢量而不是zip文件。同样,您可以使用NSIS创建可执行安装程序,并使用它代替zip。