2011-01-13 3 views
2

다음 프로젝트를 분기 할 수있는 빠른 해킹으로 .BAT 파일에 루프가 있습니다 (입력 검사 등을 생략하고 실행되는 명령입니다).) :배치 파일 FOR 루프에서 SVN 복사본을 실행하는 데 문제가 있습니다.

그래서
@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이 실제로 실행되지

일 - 박쥐 파일은 빠르게 명령을 인쇄를 통해 루프, 그리고 아무 일도 발생하지 않습니다. 옆을 추한 DOS 해킹 스크립트를 사용하여

댓글을 예상대로 I 붙여 넣기 복사 각 라인의 출력이 콘솔에 기록하고 개별적으로 실행하는 경우

, 그들은 작업, 버그는 무엇인가? 심지어 하나 개의 입력 프로젝트 이름, 예를 들어 달리기와 같은 실패 :

branchTool의 test_branch "테스트 지점 도구"으로 Proj1

+0

시도는 하나 개의 회선을 사용하는 캐럿가 여러 행을하기 때문에 그리고 다음 줄의 첫 번째 문자를 이스케이프 처리합니다. – jeb

+0

jeb : 공백을 넣으십시오. 그러나 공백을주의하십시오. 그리고 출력 복사를 붙여 넣는 것은 사실 좋지 않습니다. 나는 나쁜 명령을 불평하는 SVN을 얻지 못합니다. 그냥 _nothing_을 얻습니다. –

+0

이스케이프 된 공백이 있기 때문에 결과가 여러 줄 이스케이프 결과와 다릅니다. "SVN"을 "echo"로 바꾸면 무엇을 얻게됩니까? "에코 온"을 활성화했는지 확인하십시오. – jeb

답변

0

나는 캐럿 캐릭터의 사용과 관련이 있다고 가정합니다. 나는 항상 그것을 사용하는 것을 피했지만 - 그 이유를 기억할 수 없다. ...

나는 중괄호를 사용하는 것이 좋습니다. 예 :

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

더 나은 legiblity/maintainabilty를 위해 명령을 분리 할 수도 있습니다. 필자는 항상 명명 된 매개 변수를 명명 된 환경 변수에 할당하는 것을 선호했습니다. 그런 다음 매개 변수의 의도를 나중에 스크립트 독자에게 분명하게 알릴 수 있습니다. (나는 보통 내 임시 변수와 발신자 환경을 오염시키지 않도록하기 위해 ENDLOCAL/startlocal 쌍의 모든 환경 변수 사용을 감싸 예를 :.

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

감사합니다. BAT 파일에 중괄호를 사용할 수 있다는 것을 알지 못했습니다. –

+0

하지만 변형이 왜 실패하는지 설명하지는 않습니다. 여러 줄 변형이 중괄호로 실행됩니까? – jeb

-1

당신 수도 예를 들어, SVN 실행 파일에 대한 완전한 경로를 지정하십시오 C : \ 경로 \에서 \ Subversion \ svn.exe로 이동하십시오. 배치 스크립트를 실행할 때 svn 실행 파일이 환경 경로에 있지 않을 수 있습니다.

+0

아니요, 이미 테스트 완료 - 또한 아무 일도 일어나지 않고 오류가 발생합니다. –

관련 문제