Reputation: 12880
I have come up with this
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.
I would like to iterate the checkoutdir
list array with each directory name. I'm stuck here. I'm newbie to batch programming. Kindly help
Method 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 the second method, it errors, set /A PROJCOUNT=0 in unexpected at this time.I think there is some problem in the for
loop
Upvotes: 1
Views: 5696
Reputation: 49096
Here is my solution for this task:
@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
The first loop processes each project defined in environment variable projects
separated by a space. For each project the subroutine CheckOut
is called with the current project path as argument.
The subroutine CheckOut
first increments the project count variable which is the checkout directory string index with first string having index number 1.
The second loop in this subroutine interprets the list of directories in environment variable checkoutdir
now as a string instead of a list of strings because of using parameter /F
of FOR and enclosing the value of the environment variable in double quotes.
To get the Nth checkout directory from the string with the checkout directories separated by spaces, the tokens=x
syntax is used whereby x
is the current value of project count variable.
The checkout is done with the Nth checkout directory and the current project referenced with %~1
as being passed to the subroutine as first argument.
For details on using subroutines and referencing parameters run in a command prompt window call /?
and read all output help pages.
A subroutine as used here is like having another batch file embedded in current batch file.
NOTE: There is a limit of 31 tokens. ProjectCount
should therefore not exceed the value 31.
Upvotes: 2
Reputation: 30113
1st: wrong IF syntax: remove next harmful parentheses
IF ("%PROJCOUNT%"=="%CHECKOUTCOUNT%") (
rem ^ ^
2nd: variables within parenthesized command blocks:
Delayed Expansion will cause variables to be expanded at execution time rather than at parse time, this option is turned on with the SETLOCAL command. When delayed expansion is in effect variables can be referenced using
!variable_name!
(in addition to the normal%variable_name%
).
You need to apply Delayed Expansion where necessary as declaring it does not suffice.
3rd (cosmetic bug): remove unnecessary parentheses.
Updated code: note that TortoiseProc.exe
command is merely ECHOed for debugging purposes.
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%
Upvotes: 1