Проблема при запуске копии SVN из цикла командного файла FOR - PullRequest
2 голосов
/ 13 января 2011

У меня есть цикл в файле .BAT, который выполняет следующие действия, в качестве быстрого взлома, чтобы позволить мне ветвить проекты (проверка входных данных и т. Д., Эта команда запускается):

@for %%X in (%~3) do svn copy ^
 https://my.svn.account/%%X/trunk ^
 "https://my.svn.account/%%X/branches/%~1" ^
 -m "%~2"

Так что вы используете это как:

branchTool test_branch "инструмент ветки тестирования" "proj1, proj2"

Команды SVN взгляд вправо:

>branchTool.bat test_branch "testing branch tool" "proj1,proj2"
svn copy  https://my.svn.account/proj1/trunk  "https://my.svn.account/proj1/branches/test_branch"  -m "testing branch tool"
svn copy  https://my.svn.account/proj2/trunk  "https://my.svn.account/proj2/branches/test_branch"  -m "testing branch tool"

Однако SVN на самом деле не работает - файл .bat просто циклически печатает команды, и ничего не происходит.

Если я скопирую и вставлю вывод каждой строки, записанной в консоль, и запусту их по отдельности, они будут работать как положено

Комментарии об использовании уродливых сценариев взлома DOS в стороне , в чем ошибка? Не получается даже с одним входным именем проекта, например, при запуске:

branchTool test_branch "ветка тестирования инструмент "proj1

Ответы [ 2 ]

0 голосов
/ 13 января 2011

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

Я бы предложил вместо этого попробовать скобки.Например:

@for %%X in (%~3) do (
    svn copy https://my.svn.account/%%X/trunk "https://my.svn.account/%%X/branches/%~1" -m "%~2"
)

Вы также можете разбить команду на части для лучшей легитимности / поддержания способности.Я всегда предпочитал присваивать пронумерованные параметры именованным переменным среды.Затем вы можете сделать назначение параметров очевидным для более позднего читателя вашего сценария.(Обычно я использую любую переменную среды в пару startlocal / endlocal, чтобы не загрязнять среду вызывающих программ своими временными переменными. Например:

setlocal
for %%X in (%~3) do (
  set SRC=https://my.svn.account/%%X/trunk
  set DST=https://my.svn.account/%%X/branches/%~1
  svn copy "%SRC%" "%DST" -m "%~2"
)
endlocal
0 голосов
/ 13 января 2011

Вы можете попытаться указать полный путь к исполняемому файлу svn, например C: \ path \ to \ Subversion \ svn.exe.Возможно, при запуске пакетного сценария исполняемый файл svn не находится в пути среды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...