setlocal enabledelayedexpansion @ECHO off ECHO "svn_insert_version.cmd started" SET ORG_DIR=%CD% SET argcount=0 FOR %%x IN (%*) DO SET /A argcount+=1 IF %argcount%==0 ( ECHO "invalid arguments: [path] (infile) (outfile)" ECHO "usage: replace SVNREV text with revision number, SVNROOT with repository" ECHO "path: execute at specific location" ECHO "[optional] infile: file to read, defaults to AssemblyInfo.cs.svn" ECHO "[optional] outfile: file to create, defaults to AssemblyInfo.cs" GOTO EOF ) ECHO "%argcount% arguments received" IF %argcount%==1 ( ECHO "setting default in and out files." SET INTEXTFILE=AssemblyInfo.cs.svn SET OUTTEXTFILE=AssemblyInfo.cs ) ELSE ( ECHO "setting custom in and out files." SET INTEXTFILE=%2 SET OUTTEXTFILE=%3 ) CD %1 ECHO "parsing svn info in directory %CD%" REM GET THE SVN VERSION NUMBER AND REVISION PATH FOR /f "tokens=1,* delims=¶" %%A IN ('svn info') DO ( ECHO %%A | findstr /I /C:"Last Changed Rev" && SET REV_BUF=%%A ECHO %%A | findstr /I "^URL" && SET ROOT_BUF=%%A ECHO %%A | findstr /I /C:"Repository Root" && SET AFTER_BUF=%%A ) IF NOT DEFINED REV_BUF ( SET SVN_REV=0 SET SVN_ROOT= ) ELSE ( SET SVN_REV=%REV_BUF:~18% SET SVN_ROOT=%ROOT_BUF:~5% SET "FIND=*%AFTER_BUF:~17% CALL SET SVN_ROOT=%%SVN_ROOT:!FIND!=%% ) ECHO "using rev %SVN_REV% and root %SVN_ROOT%" REM SUBSTITUTE THE VERSION NUMBER IN TEMPLATE ECHO "modifying %OUTTEXTFILE% in directory %1" SET SEARCHTEXT=SVNREV SET SEARCHROOT=SVNROOT SET OUTPUTLINE= IF EXIST %OUTTEXTFILE% ( ECHO "removing %OUTTEXTFILE%" DEL %OUTTEXTFILE% ) ECHO "writing new %OUTTEXTFILE%" REM This command can process version files which contain special character "!" call powershell -Command "(gc %INTEXTFILE%) -replace '%SEARCHTEXT%', '%SVN_REV%' | Out-File -encoding UTF8 %OUTTEXTFILE% ) CD %ORG_DIR% ECHO "svn_insert_version.cmd done" :EOF