Как получить номер «BASE» с помощью команды «svn info» с помощью фильтра «find» в командном файле Windows? - PullRequest
1 голос
/ 22 марта 2019

Я хочу получить номер «BASE» с помощью команды «svn info» в пакетном файле Windows в виде следующего пакетного сценария:

svn update

for /f "tokens=2" %%i in ('svn info -rBASE^|find "Revision"') do (
 @echo %%i
 set svn_rev=%%i
)

Но я всегда получал номер «HEAD» моего управляемого SVNкод проекта.Поэтому я попробовал команду прямо в консоли:

>svn info -rBASE
Path: AliceAgent4.0b5856
URL: https://192.168.1.116:3443/svn/ProjectAliceVR/AliceOperationAgent/branches/AliceAgent4.0b5856
Relative URL: ^/AliceOperationAgent/branches/AliceAgent4.0b5856
Repository Root: https://192.168.1.116:3443/svn/ProjectAliceVR
Repository UUID: 794566ed1-6640e-7746-860d-66136dce9e99a
Revision: 5936
Node Kind: directory
Last Changed Author: yuanhui.he
Last Changed Rev: 5933
Last Changed Date: 2019-03-21 15:10:43 +0800 (周四, 21 3月 2019)

Revision равно 5936, отличное от 5933.Затем я попытался HEAD параметр svn, он выводит тот же результат с BASE:

> svn info -rHEAD
Path: AliceAgent4.0b5856
URL: https://192.168.1.116:3443/svn/ProjectAliceVR/AliceOperationAgent/branches/AliceAgent4.0b5856
Relative URL: ^/AliceOperationAgent/branches/AliceAgent4.0b5856
Repository Root: https://192.168.1.116:3443/svn/ProjectAliceVR
Repository UUID: 794566ed1-6640e-7746-860d-66136dce9e99a
Revision: 5936
Node Kind: directory
Last Changed Author: yuanhui.he
Last Changed Rev: 5933
Last Changed Date: 2019-03-21 15:10:43 +0800 (周四, 21 3月 2019)

РЕДАКТИРОВАТЬ:

Я пытался 'svn info -rBASE^|find "Last Changed Rev:"', но это толькополучил строку Changed в пакетном скрипте.

Итак, как мне получить число 5933 в строке Last Changed Rev: 5933?

Ответы [ 2 ]

1 голос
/ 22 марта 2019

В основном, в этом вопросе есть две проблемы:

  • Как получить номер COMMITTED, отличный от номера HEAD.
  • Как исправить параметр find в пакетном файле Windows, чтобы найти правильный результат.

Честно говоря, вопрос Как вы определяете последний номер версии SVN с корнем в каталоге? моя проблема не устранена, но некоторые вопросы ответили на мой вопрос.

Я думаю, что кто-нибудь найдет мою проблему здесь, потому что они сталкиваются с теми же вопросами со мной. Пропустить время для них всегда ценно, поэтому я обговорил ответы здесь:

A1: изменение BASE или HEAD на COMMITTED может напрямую получить желаемое:

svn update

for /f "tokens=2" %%i in ('svn info -rCOMMITTED^|find "Revision"') do (
 @echo %%i
 set svn_rev=%%i
)

A2: измените значение tokens цикла for на 4, затем измените параметр find на Last Changed Rev:. Это может исправить действие цикла for, чтобы найти правильный номер. Я не знаком с пакетным скриптом Windows, моя вина, @ Compo.

svn update

for /f "tokens=4" %%i in ('svn info -rHEAD^|find "Last Changed Rev:"') do (
 @echo %%i
 set svn_rev=%%i
)
0 голосов
/ 22 марта 2019

Согласно моему комментарию,

  • разделить ввод в двоеточии
  • , используя смоделированный ввод для текстового файла
  • использовать findstr с его функциями RegEx ^привязка в начале строки и несколько строк поиска
  • установить имя переменной с начала строки (без удаленных пробелов) и
  • использовать set / A для удаления конечного пробела из числа
    (может произойти сбой при08xx / 09xx интерпретируется как восьмеричное)

:: Q:\Test\2019\03\22\SO_55291828.cmd
@Echo off&Setlocal EnableDelayedExpansion

::svn update

Echo svn info -rBASE
for /f "tokens=1-2delims=:" %%i in ('
  type svn_info-rBASE ^|findstr "^Last.Changed.Rev ^Revision"
') do (
 Set "var=%%i"
 set /A "_!var: =!=%%j"
)
Set _
Echo:
Echo svn info -rHEAD
for /f "tokens=1-2delims=:" %%i in ('
  type svn_info-rHEAD ^|findstr "^Last.Changed.Rev ^Revision"
') do (
 Set "var=%%i"
 set /A "_!var: =!=%%j"
)
Set _

Пример вывода:

> SO_55291828.cmd
svn info -rBASE
_LastChangedRev=5933
_Revision=5936

svn info -rHEAD
_LastChangedRev=5933
_Revision=5936
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...