2012-10-01 9 views
1

내가 실행하려고 윈도우 배치 파일은 다음과 같은 과제 포함 "이 시간에 예상치 못한"보고 :내 배치 스크립트라는 오류가

set ANT_HOME="C:/Program Files/apache-ant-1.8.4" 

기분을 상하게하는 라인은 다음과 같습니다

call %ANT_HOME%/bin/ant -f ../config/common.xml start_db 
을 나는에 에코으로 스크립트를 실행할 때

는 얻을 : 나는의 끝으로 두 번째 견적을 이동 한

call "C:/Program_Files/apache-ant-1.8.4"/bin/ant -f ../config/common.xml start_db 
Files/apache-ant-1.8.4""=="" was unexpected at this time. 

경로, 개미 후,하지만 같은 오류 메시지가 나타납니다.

+0

예제 출력에 원하지 않는 밑줄이 있다고 생각합니다.'Program_Files'는'Program Files'을 읽어야합니다. – dbenham

답변

5

개미가 .exe 인 경우 코드가 작동해야한다고 말합니다. 하지만 나는 개미가 배치 파일이고, 앤트 스크립트 내에서 오류가 발생하고 있다고 생각합니다.

내 결론은 오류 메시지에 있습니다. 구체적으로 다음 부분은 ""==""입니다. 오류 메시지는 일괄 구문 분석 오류이며 코드에서 이러한 문자를 생성하는 방법을 알 수 없습니다. 그래서 개미는 문제를 일으키는 배치 스크립트 여야합니다.

ant.bat의 상단에 @echo off이있는 것으로 의심되어 실제 실패한 행은 표시되지 않습니다.

ant.bat 스크립트에 액세스 할 수 없기 때문에 정확히 무엇이 실패하고 있는지 진단 할 수 없으며 해결 방법을 추측 할 수 없습니다.

업데이트 - 정확한 문제는 온라인 ant.bat의 사본을 발견

을 발견했다.

그 안에 다음 코드 줄이 있습니다

if "%ANT_HOME%"=="" set ANT_HOME=%DEFAULT_ANT_HOME% 

ANT_HOME 귀하의 정의는 따옴표를 둘러싸 포함, 그래서 코드는 당신에게 인용되지

if ""C:/Program Files/apache-ant-1.8.4""=="" set ANT_HOME=%DEFAULT_ANT_HOME% 

공간을 실행하려고하고, 당신의 실수를 가져라.

당신이 모든 ANT_HOME의 정의에서 따옴표를 제거하는 것입니다 해결하기 위해 수행 한 다음 CALL 문에 따옴표를 추가 할 필요가 모든 :

set "ANT_HOME=C:/Program Files/apache-ant-1.8.4" 
call "%ANT_HOME%/bin/ant" -f ../config/common.xml start_db 

정방향 슬래시는 항상 내 폴더 구분 기호로 신뢰할 수 없습니다 Windows. Why does the cmd.exe shell on Windows fail with paths using a forward-slash ('/'') path separator?을 참조하십시오.

백 슬래시를 사용하는 것이 좋습니다.

set "ANT_HOME=C:\Program Files\apache-ant-1.8.4" 
call "%ANT_HOME%\bin\ant" -f ..\config\common.xml start_db 
+1

굉장! 그것은 효과가 있었다. 감사합니다 dbenham. –

+0

또한 출력에 추가로 밑줄이 생겨서 죄송합니다. 그것은 디버그 시도에서 나온 것입니다. 슬래시를 원래 백 슬래시로 되 돌렸고 변수 이름을 포함하는 올바른 위치의 따옴표를 사용하여 스크립트가 챔피언처럼 작동했습니다. 나는 내 질문에 제공된 신속하고 지식이 풍부한 답변에 너무 감명 받았습니다. 다시 한번 감사드립니다. –

2

따옴표는 파일 이름을 완전히 묶어야합니다. 부분 이름에는 사용할 수 없습니다. 대신 다음을 시도해보십시오 :

set ANT_HOME=C:\Program Files\apache-ant-1.8.4 
call "%ANT_HOME%\bin\ant" -f ../config/common.xml start_db 

아, 일부 슬래시를 백 슬래시 (DOS는 슬래시를 사용하지 않음)로 변경했습니다. 나는 당신이 비록 당신이 통과하고있는 그 매개 변수에서 /을 사용할 수 있다고 가정합니다.

+0

백 슬래시 대 일반 슬래시의 사용법에 대해 의견을 편집했습니다. – paddy

+1

두 가지 모두 잘못됨 - 동일한 경로 내에서 부분적으로 여러 번 인용 부호를 여러 번 사용할 수도 있습니다. 따옴표는 공백과 특수 문자를 보호 한 다음 삭제됩니다. 한번 시도 해보자 :-) 또한, 슬래시는 종종 작동하지만, 도청당하는 것으로 보인다. CALL은 방금 실행 한 몇 가지 빠른 테스트를 기반으로 슬래시를 지원하는 것으로 보입니다. Windows에서 cmd.exe 셸이 슬래시 경로 구분 기호를 사용하는 경로와 함께 실패하는 이유는 무엇입니까?] (http://stackoverflow.com/a/10526678/1012053) CALL과 관련이없고 작동하지 않는 예제 . – dbenham

+0

제안 된 수정 사항으로 문제를 해결할 수 있지만 귀하가 진술 한 이유는 아닙니다. [내 대답] (http://stackoverflow.com/a/12666896/1012053)을 참조하십시오. – dbenham

관련 문제