简体   繁体   English

使用批处理文件静默提取 zip 文件

[英]extract zip files silently using batch file

I have written the below bat file to extract the zip files.我编写了以下 bat 文件来提取 zip 文件。 But this is not working when I execute it from Jenkins.但是当我从 Jenkins 执行它时这不起作用。 I suspect that this is because since its trying to launch the copy UI and service is preventing from doing it as windows services dont allow to work with UIs.我怀疑这是因为它试图启动复制 UI 和服务阻止这样做,因为 Windows 服务不允许使用 UI。 Is there a way to edit the below script to do the unzipping silently?有没有办法编辑以下脚本以静默解压? If there are any other tools, please provide some example.如果有任何其他工具,请提供一些示例。

    @echo off
FOR /D %%p IN ("%CD%\Setups\*.*") DO rmdir "%%p" /s /q

call mvn org.apache.maven.plugins:maven-dependency-plugin:2.4:get -DrepoUrl=http://10.101.15.190:8081/nexus/content/repositories/releases/ -Dartifact=k:update-service:1.0.3 -Ddest=Setups/Services/update-service.jar
call mvn org.apache.maven.plugins:maven-dependency-plugin:2.4:get -DrepoUrl=http://10.101.15.190:8081/nexus/content/repositories/releases/ -Dartifact=k:installer-prerequisites:1.0.0 -Ddest=Setups/PreRequisites/installer-prerequisites.zip -Dpackaging=zip
call mvn org.apache.maven.plugins:maven-dependency-plugin:2.4:get -DrepoUrl=http://10.101.15.190:8081/nexus/content/repositories/releases/ -Dartifact=k:-apps:1.0.0 -Ddest=Setups/Apps/-apps.zip -Dpackaging=zip
call mvn org.apache.maven.plugins:maven-dependency-plugin:2.4:get -DrepoUrl=http://10.101.15.190:8081/nexus/content/repositories/releases/ -Dartifact=k:mosquitto:1.0.0 -Ddest=Setups/mosquitto/mosquitto.zip -Dpackaging=zip
call mvn org.apache.maven.plugins:maven-dependency-plugin:2.4:get -DrepoUrl=http://10.101.15.190:8081/nexus/content/repositories/releases/ -Dartifact=k:ble-service:1.0 -Ddest=Setups/Services/ble-service.jar
for /r %%i in ("*.zip") do (
    Call :UnZipFile "%%~dpi" "%%~fi"
    del /S /Q "%%~fi"
)
exit \b

:UnZipFile <ExtractTo> <newzipfile>
    setlocal
    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%"
    endlocal

You should use 7zip tool.您应该使用 7zip 工具。 After you have installed it, you should use the following command.安装后,您应该使用以下命令。

"C:\Program Files\7-Zip\7z.exe" e "C:\myzipfile.7z" -o"C:\ExtractedFolder" *.* -r -y

or parameterize with batch file.或用批处理文件参数化。

call "C:\\Scripts\\mycustombatch.bat" "%WORKSPACE%\\myzipfile.7z" "C:\\ExtractedFolder"调用 "C:\\Scripts\\mycustombatch.bat" "%WORKSPACE%\\myzipfile.7z" "C:\\ExtractedFolder"

mycustombatch.bat mycustombatch.bat

cd "C:\Program Files\7-Zip"
7z e %1 -o%2 *.* -r -y

7z.exe usage examples: http://www.dotnetperls.com/7-zip-examples 7z.exe 使用示例: http : //www.dotnetperls.com/7-zip-examples

An option would be to use a PowerShell script instead, and use something like this:一种选择是改用 PowerShell 脚本,并使用以下内容:

function UnZip
{
    param([string]$zip, [string]$outpath)

    [System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
}
UnZip "D:\YourFile.zip" "D:\The_Path_You_Want_It_To_Be_Extracted"

This way you don't require any 3rd party tool to be installed on the build server.这样您就不需要在构建服务器上安装任何 3rd 方工具。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM