2014-05-04 35 views
0

我无法打印更改列表。每次运行我的脚本并检查值时,它都是空白的。SVNLOOK在postcommit hook中更改 - 批处理文件

postcommithook.bat 
set REPOS=%1 
set REV=%2 
set TXN_NAME=%3 
set LF =^

SET ThisScriptsDirectory=%~dp0 

set svnlook = "C:\Program Files\TortoiseSVN\bin\" 

for /f "tokens=*" %%a in ('%svnlook% svnlook author -r %REV% %REPOS%') do set AUTH_NAME=%%a 

setlocal enabledelayedexpansion 

set MSG = for /f %%i in ('svnlook changed -r %REV% %REPOS%') do (
SET "VAR=!VAR!!LF%%i" 
SET "PAR=!PAR!^^!LF!!LF!%%i" 
) 
set DIRS_CHANGED = !VAR! 
endlocal 

SET PowerShellScriptPath=%ThisScriptsDirectory%emailer.ps1 
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '%PowerShellScriptPath%' '%REPOS%' '%REV%' '%TXN_NAME%' '%AUTH_NAME%' '%DIRS_CHANGED%'"; 

我明白我在循环中的某个地方正在调用更改函数。我将如何获得更改的目录列表并将其传递给邮件程序脚本?

在此先感谢

+0

'LF'不会在这里包含一个新行;你必须移除'='-sign周围的空格,并且你必须在'set LF = ^'行后面有两个*空行...... – aschipfl

回答

0

这里回答我的问题: 我已删除其中命令“SVN改变”做循环。相反,我将输出存储在单独的文件中,然后通过PowerShell/vbscript文件开始处理它,以生成电子邮件。

替换以下:

svnlook changed %REPOS% -r %REV% > %ThisScriptsDirectory%tmp_log.txt 

而不是

setlocal enabledelayedexpansion 
set MSG = for /f %%i in ('svnlook changed -r %REV% %REPOS%') do (
SET "VAR=!VAR!!LF%%i" 
SET "PAR=!PAR!^^!LF!!LF!%%i" 
) 
set DIRS_CHANGED = !VAR! 
endlocal 

感谢, Venkat。