2016-05-21 5 views
1

Ich habe mit diesemSVN checkout Automatisierung Batch

echo. 
echo. [ SVN Updater ] 
setlocal enableDelayedExpansion 
set SOURCE=E:\Svncheckout\ 
set SVN=C:\Program Files\TortoiseSVN\bin 
set SVN_REPO_URL=https://SVNSERVERIP/svn/ 
set projects=project1/branches/hello1 project2/branches/hello2 
set checkoutdir=project1 project2 
echo. 
SET PROJCOUNT=0 
(for %%i in (%projects%) do (
    echo. Checking out %SVN_REPO_URL%%%i from SVN... 
    "%SVN%\TortoiseProc.exe" /command:checkout /path:"%SOURCE%%checkoutdir[0]%" /url:"%SVN_REPO_URL%%%i" /closeonend:2 
    PROJCOUNT+=1; 
) 
) 
echo. 
echo. Operation complete. 

kommen Ich mag würde die checkoutdir Liste Array mit jedem Verzeichnisnamen iterieren. Ich stecke hier fest. Ich bin Neuling für die Batch-Programmierung. Freundlicherweise helfen

Methode 2:

echo. 
echo. [ SVN Updater ] 
setlocal enableDelayedExpansion 
set SOURCE=E:\Svncheckout\21MAY2016\ 
set SVN=C:\Program Files\TortoiseSVN\bin 
set SVN_REPO_URL=https://192.168.1.35:8443/svn/ 
set projects=JPO/JPOMobile/branches/2016-05-18 JPO/JPOWEB/branches/20160518 
set checkoutdir=JPOMobile JPOWEB 
set /A CHECKOUTCOUNT=1 
set /A PROJCOUNT=0 
(for %%i in (%projects%) do (
     SET /A "PROJCOUNT+=1" 
    (for %%a in (%checkoutdir%) do (
     IF ("%PROJCOUNT%"=="%CHECKOUTCOUNT%") (
      echo. Checking out %SVN_REPO_URL%%%i from SVN... 
      "%SVN%\TortoiseProc.exe" /command:checkout /path:"%SOURCE%%%a" /url:"%SVN_REPO_URL%%%i" /closeonend:2 
      SET /A "CHECKOUTCOUNT+=1" 
     )  

    )) 
)) 
echo. 
echo. Operation complete. 

In dem zweiten Verfahren wird es Fehler, Set/A PROJCOUNT = 0 in unerwarteter an diesem time.I denken, es gibt ein Problem in der Schleife

for ist
+0

Ich kann sehen, dass Sie wissen 'für %% i in (% projekte%) tun (rem einige Code hier ...)' Ansatz. Wenden Sie es wie folgt an: 'für %% G in (% checkoutdir%) tun Sie (rem %% ich loop hier)' aber verwenden Sie '%% ~ G' anstelle von%% checkoutdir [0]%'. Es gibt nichts wie _list array_ im Batch-Scripting: Es gibt nur _strings_ (oder _numbers_ somewhen). – JosefZ

+0

@JosefZ Ich habe einen anderen Versuch aktualisiert. Kannst du mir helfen? – Keerthivasan

+1

Warum Tortoise GUI verwenden? Für Interessierte können Sie auch direkt die SVN-Befehlszeile verwenden: "% SVN% \ svn.exe" checkout "% SVN_REPO_URL %% ~ 1" "% SOURCE %%% D" – AFract

Antwort

2

Hier ist meine Lösung für diese Aufgabe:

@echo off 
echo. 
echo. [ SVN Updater ] 
set "SOURCE=E:\Svncheckout\21MAY2016\" 
set "SVN=%ProgramFiles%\TortoiseSVN\bin" 
set "SVN_REPO_URL=https://192.168.1.35:8443/svn/" 
set "projects=JPO/JPOMobile/branches/2016-05-18 JPO/JPOWEB/branches/20160518" 
set "checkoutdir=JPOMobile JPOWEB" 
set "ProjectCount=0" 
for %%P in (%projects%) do call :CheckOut "%%P" 
echo. 
echo. Operation complete. 

rem Exit batch processing to avoid a fall through to subroutine. 
exit /B 

:CheckOut 
set /A ProjectCount+=1 
for /F "tokens=%ProjectCount%" %%D in ("%checkoutdir%") do (
    echo. Checking out %SVN_REPO_URL%%~1 from SVN... 
    "%SVN%\TortoiseProc.exe" /command:checkout /path:"%SOURCE%%%D" /url:"%SVN_REPO_URL%%~1" /closeonend:2 
) 
rem Exit this subroutine. It is also possible to use GOTO :EOF 
exit /B 

Die ersten Prozesse Schleife jedes Projekt in Umgebungsvariable projects durch ein Leerzeichen getrennt definiert. Für jedes Projekt wird das Unterprogramm CheckOut mit dem aktuellen Projektpfad als Argument aufgerufen.

Die Subroutine CheckOut erste Schritte werden die Variable Projektzählung, die die Kasse Verzeichnis Stringindex mit dem ersten Zeichenfolge aufweist, in diesem Unterprogramm Indexnummer 1.

Die zweite Schleife nun als die Liste der Verzeichnisse in der Umgebungsvariable checkoutdir interpretiert String anstelle einer Liste von Strings, weil der Parameter /F von FOR verwendet wird und der Wert der Umgebungsvariablen in doppelte Anführungszeichen eingeschlossen wird.

Um das N-tes Checkout-Verzeichnis aus der Zeichenfolge mit den durch Leerzeichen getrennten Checkout-Verzeichnissen zu erhalten, wird die tokens=x-Syntax verwendet, wobei x der aktuelle Wert der Projektzählvariablen ist.

Das Auschecken erfolgt mit dem N-ten Checkout-Verzeichnis, und das aktuelle Projekt, auf das mit verwiesen wird, wird als erstes Argument an das Unterprogramm übergeben.

Einzelheiten zur Verwendung von Subroutinen und Referenzierungsparametern finden Sie in einem Eingabeaufforderungsfenster call /? und lesen Sie alle Ausgabehilfeseiten.

Eine Subroutine, wie sie hier verwendet wird, ist so, als hätte sie eine andere Batch-Datei, die in die aktuelle Batch-Datei eingebettet ist.

HINWEIS: Es gibt ein Limit von 31 Token. ProjectCount sollte daher nicht den Wert 31 überschreiten.

+0

Großartig, das ist erstaunlich. Danke vielmals! Ich habe viel daraus gelernt – Keerthivasan

1

1.: falsch IF syntax: entfernen nächste schädlichen Klammern

IF ("%PROJCOUNT%"=="%CHECKOUTCOUNT%") (
rem ^       ^

2.: variables within parenthesized command blocks: bei der Ausführung Zeit

verzögerte Expansion wird Variablen verursachen eher ausgebaut werden als zur Analysezeit ist diese Option mit dem SETLOCAL command eingeschaltet. Wenn die verzögerte Expansion wirksam ist, können die Variablen unter Verwendung von !variable_name! referenziert werden (zusätzlich zu den normalen %variable_name%).

Sie müssen geltenVerzögerte Expansionerforderlichenfalls wie erklärt es genügt nicht.

3. (kosmetischer Fehler): entfernen unnötige Klammern.

Aktualisierter Code: Beachten Sie, dass der Befehl TortoiseProc.exe lediglich zu Debugging-Zwecken ECHOed ist.

echo off 
echo. 
echo. [ SVN Updater ] 
setlocal EnableExtensions EnableDelayedExpansion 
set SOURCE=E:\Svncheckout\21MAY2016\ 
set SVN=C:\Program Files\TortoiseSVN\bin 
set SVN_REPO_URL=https://192.168.1.35:8443/svn/ 
set projects=JPO/JPOMobile/branches/2016-05-18 JPO/JPOWEB/branches/20160518 
set checkoutdir=JPOMobile JPOWEB 
set /A CHECKOUTCOUNT=1 
set /A PROJCOUNT=0 
for %%i in (%projects%) do (
     SET /A "PROJCOUNT+=1" 
    for %%a in (%checkoutdir%) do (
     rem wrong IF ("%PROJCOUNT%"=="%CHECKOUTCOUNT%") (
     rem right IF "!PROJCOUNT!"=="!CHECKOUTCOUNT!" (
     rem or IF !PROJCOUNT! EQU !CHECKOUTCOUNT! (
     IF !PROJCOUNT! EQU !CHECKOUTCOUNT! (
      echo. Checking out %SVN_REPO_URL%%%i from SVN... 
      ECHO "%SVN%\TortoiseProc.exe" /command:checkout /path:"%SOURCE%%%a" /url:"%SVN_REPO_URL%%%i" /closeonend:2 
      SET /A "CHECKOUTCOUNT+=1" 
     )  

    ) 
) 
echo. 
echo. Operation complete. 
echo. debug  PROJCOUNT=%PROJCOUNT% 
echo.  CHECKOUTCOUNT=%CHECKOUTCOUNT% 
+0

wegen der Erklärung auschecken. Ich schätze es wirklich – Keerthivasan

Verwandte Themen