2016-05-09 4 views
2

Ich habe die unten Bat-Datei geschrieben, um die ZIP-Dateien zu extrahieren. Aber das funktioniert nicht, wenn ich es von Jenkins ausführe. Ich vermute, dass dies daran liegt, dass der Versuch, die Kopier-UI und den Dienst zu starten, dies verhindert, da Windows-Dienste die Arbeit mit UIs nicht erlauben. Gibt es eine Möglichkeit, das folgende Skript zu bearbeiten, um das unkompilierte Entpacken durchzuführen? Wenn es andere Tools gibt, geben Sie bitte ein Beispiel an.extrahieren Zip-Dateien still mit Batch-Datei

@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 
+0

Bitte verwenden Sie eine Befehlszeile "Entpacken" Werkzeug. Es gibt viele .. – Jayan

+0

@Jayan obwohl es viele Unzip-Tools gibt, die verwendet werden könnten, bedeutet das nicht, dass sie immer eine Möglichkeit sind, verwendet zu werden. Der Grund, warum der Batch meistens verwendet wird, bedeutet, dass er mit vielen verschiedenen Windows-Computern kompatibel sein muss, die möglicherweise nicht alle über ein "Unzip-Tool" verfügen. –

Antwort

2

Sie sollten 7zip-Tool verwenden. Nachdem Sie es installiert haben, sollten Sie den folgenden Befehl verwenden.

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

oder mit Batchdatei parametrieren.

call "C: \ Scripts \ mycustombatch.bat" "% ARBEITSBEREICH% \ myzipfile.7z" "C: \ extrahierter"

mycustombatch.bat

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

7z.exe Anwendungsbeispiele: http://www.dotnetperls.com/7-zip-examples

0

Eine Option wäre stattdessen ein PowerShell-Skript zu verwenden, und so etwas wie folgt verwenden:

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" 

Auf diese Weise können keine 3rd-Party-Tool benötigen, um auf dem Build-Server installiert werden.