2009-10-09 3 views
2

мне нужно получить SVN сообщений фиксации в посте-фиксации летучей мыши в Windows, так что я это сделать:Как получить сообщение svn commit в окне bat?

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

+0

Спасибо, setlocal enabledelayedexpansion - это ключ ~ – zhongshu

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, Nice, но мои восклицательные знаки исчезли, все мои сообщения в журнале содержат «Это работает!». :-) – jeb

+0

@jeb: Я бы изменил это на «Он работает на моей машине!» :) Newlines против восклицательных знаков, каждый язык сценариев имеет свои причуды - я уверен, вы знаете, что это 'ENABLEDELAYEDEXPANSION', который несет ответственность за исчезающие восклицательные знаки. – mousio