2012-11-29 8 views
3

다른 배치 파일에서 배치 파일을 호출하려고하고 있고 두 번째 배치 파일을 실행 한 후에는 제어 도구가 있어야합니다. 첫 번째 배치 파일로 반환되고 실행을 다시 시작해야합니다. 현재 내가 내 부모의 배치 파일에서 다음 명령을 사용하고 있습니다 :다른 배치 파일의 경로에 공백이있는 배치 파일을 호출하고 제어를 부모 배치 파일로 반환하는 방법

call "cmd /c start /b %ROOT_HOME%\folder1\bin\bat1.bat" 

이 잘 오랫동안 %의 ROOT_HOME의 %가 공간을 거기에이없는 경로가 작동합니다.

경로에 공백이 포함되어 있으면 위의 명령이 실패합니다.

내가 cmd를 의 모든 조합을 시도, 여전히 원하는 결과를 달성 할 수없는, 전화을 시작하지만 .

또한 bat1.bat에는 출구이 없으므로 수정할 수 없습니다. 을 호출하면 하위 배치 파일 만 실행되고 상위 배치 파일은 반환되지 않습니다.

+0

왜 이렇게 복잡한 회선을 사용합니까? 단순히 '호출'하지 않아도됩니까? 'call cmd/c start/b'와 같이 작동해야합니다. % ROOT_HOME % \ folder1 \ bin \ bat1.bat " – npocmaka

+0

호출 여러 개의 내부 명령을 실행하기 위해 하나의 인수만을 취합니다. 문자열은 ""안에 있습니다. 방법을 시도했지만 작동하지 않습니다. bat1이 실행되지 않습니다. – r3ap3r

답변

1

당신이 짧은 경로로 시도하는 경우에 대해 어떻게이

call cmd /c start /b "" "%ROOT_HOME%\folder1\bin\bat1.bat" 
+0

이것은 배치 파일을 호출 하겠지만, 자식 배치 파일이 실행될 다른 콘솔을 열 것이고 자식 배치 파일은 EXIT가없고 수정할 수 없습니다. 자동 콘솔이 자동으로 닫히지 않습니다. 따라서 일괄 처리가 동일한 콘솔 내에서 그리고 다른 창없이 실행될 수 있기 때문에 cmd 및 start와 함께 사용해야했습니다. – r3ap3r

+1

@ r3ap3r 좋아, 내가 당신의 초기 명령을 반영하기 위해 내 대답을 편집했습니다. –

+0

아니,이 중 하나를 시도하지 않습니다. 시도해. "전화"단일 인수를 수락 할 수 있습니다. 귀하의 명령 "호출"인수로 cmd를 걸릴 및 아무것도하지 않을 콘솔 열어 아무것도 보이지 않을 것입니다. 따라서 ""(문자열)로 묶습니다. – r3ap3r

1

만큼 간단합니다 : 당신이 산란하고 있기 때문에,

for /f %%P in (%ROOT_HOME%) do set SHORT_ROOT_HOME=%%~sP 
call "cmd /c start /b %SHORT_ROOT_HOME%\folder1\bin\bat1.bat" 
+1

나는 똑같이 제안하려고했다. :-) – anishsane

3

당신은 모두가 call 필요하지 않습니다 어쨌든 cmd를 통해 새로운 배치 :

start "" /b "%ROOT_HOME%\folder1\bin\bat1.bat" 

0을 사용하는 거라고 왜 궁금하지만 당신이 (호출 주위에 setlocal/endlocal를 사용하여 쉽게 되돌릴 수 있습니다) 환경 오염에 대해 걱정하지 않는, 그래서 call도 충분합니다 :

call "%ROOT_HOME%\folder1\bin\bat1.bat" 

을 일반적으로 : 구문 분석 및 실행의 더 많은 레이어를 무언가를 둘러싼 것은 복잡하게 만들고 문제를 해결하는 일이 거의 없습니다. Cf. PowerShell에서 iex을 과용하십시오.

관련 문제