2009-10-09 62 views
2

我需要得到SVN在Windows犯post-commit鉤子蝙蝠消息,所以我這樣做:如何在窗口蝙蝠中獲取完整的svn提交信息?

FOR /F "tokens=*" %%a in ('"svnlook log %1 -r %2"') do @SET MSG=%%a 

我測試了一下,它的確定對於大多數情況下。

但是,當我在SVN提交信息中輸入多行時,該命令只能得到提交信息的最後一行,我認爲這是由於windows批處理文件的限制造成的。

如何將整個提交消息傳遞給bat變量?

回答

1

FOR /F根據輸入中的行進行操作。嘗試將@SET MSG=%%a更改爲@SET MSG=!MSG! %%a

+0

不要忘了'SETLOCAL enabledelayedexpansion',然後。 – Joey 2009-10-09 19:41:05

+0

謝謝,setlocal enabledelayedexpansion是關鍵〜 – zhongshu 2009-10-10 04:18:24

2

根據提交消息的類型或格式,最好也保留換行符;這可以使用這個來完成:

set newline=^ 


setlocal ENABLEDELAYEDEXPANSION 

需要注意的是空線都需要換行,所以是ENABLEDELAYEDEXPANSION(一次使用!newline!之前的任何地方)。現在

你可以用它來連接具有一個換行符消息(跳過空行,順便說一句),然後修剪第一個換行符:

FOR /F "tokens=*" %%a in ('"svnlook log %1 -r %2"') do @SET MSG=!MSG!!newline!%%a 
@SET MSG=!MSG:~1! 
+0

+1,尼斯但我的驚歎號不見了,我所有的日誌信息都包含一個「It works!」。 :-) – jeb 2011-04-07 09:47:33

+0

@jeb:我會將其改爲「它適用於我的機器!」 :)新線與感嘆號,每種腳本語言都有它的怪癖 - 我敢打賭,你知道它是'ENABLEDELAYEDEXPANSION',它負責消失的感嘆號。 – mousio 2011-04-07 10:01:02