set SVN_BINDIR=C:\"Program Files"\"VisualSVN Server"\bin set REPOS=%1 set TXN=%2 set s=%SVN_BINDIR%\svnlook log "%REPOS%" -t "%TXN%" for /f "delims=" %%a in ('%s%') do set myvar=%%a set logmess=%myvar% :intercept_left if "%myvar%"==" " goto err if "%myvar:~0,1%"==" " set "myvar=%myvar:~1%"&goto intercept_left :intercept_right if "%myvar%"==" " goto err if "%myvar:~-1%"==" " set "myvar=%myvar:~0,-1%"&goto intercept_right set count=0 setlocal enabledelayedexpansion :countgoto set /a count+=1 for /f %%i in ("%count%") do if not "!myvar:~%%i,1!"=="" goto countgoto if %count% lss 5 (goto err) else exit 0 :err echo. 1>&2 echo Your commit has been blocked because your logmessage at least 5 1>&2 echo Please write a log message describing the purpose of your changes and 1>&2 echo then try committing again. -- Thank you 1>&2 exit 1
set s=%SVN_BINDIR%\svnlook log "%REPOS%" -t "%TXN%" 这个是得到提交时日志的命令
for /f "delims=" %%a in ('%s%') do set myvar=%%a 是把命令中返回的字符串赋值给变量myvar。
:intercept_left
if "%myvar%"==" " goto err
if "%myvar:~0,1%"==" " set "myvar=%myvar:~1%"&goto intercept_left
:intercept_right
if "%myvar%"==" " goto err
if "%myvar:~-1%"==" " set "myvar=%myvar:~0,-1%"&goto intercept_right
这个是去掉前后空格,但是如果去掉的过程中发现最后一个是" "说明就都是空格了,所以就跳到错误处
set count=0
setlocal enabledelayedexpansion
:countgoto
set /a count+=1
for /f %%i in ("%count%") do if not "!myvar:~%%i,1!"=="" goto countgoto
这个是统计有多少字符的