Windows cmd 스크립트에서 여러 명령 실행


136

여러 작업을 연속적으로 수행하기 위해 Windows cmd 스크립트를 작성하려고합니다. 그러나 항상 스크립트의 첫 번째 명령 후에 중지됩니다.

이후에 중지되는 명령은 maven 빌드입니다 (관련이 있는지 확실하지 않음).

각 작업을 차례로 수행하고 실행하려면 어떻게해야합니까?

소프트웨어를 설치하거나 레지스트리 등을 구성하는 것은 완전히 문제가 아닙니다. 바닐라 Windows XP 설치에서 작동해야합니다.

이상적으로는 명령 중 하나라도 실패하면 스크립트를 중단하고 싶지만 "필수품"이지만 필수는 아닙니다.

감사.

답변:


139

다른 .bat 파일을 호출 할 때는 호출 앞에 "호출"이 필요하다고 생각합니다.

call otherCommand.bat

1
안녕하세요, 원래 스크립트에서 다른 .cmd 파일을 호출하지 않았지만 이후에 개별 파일로 분할하여 차례로 실행할 수 있습니다. 따라서 각 명령 앞에 전화를 걸면 트릭을 수행 한 것 같습니다. 감사합니다!
Darren Greaves

5
실제로 Windows의 mvn경우 .bat 파일 자체이므로 .bat 파일과 같이 사용해야 call합니다 call mvn install. 일반적으로 추가 cmd 파일을 만들 필요가 없습니다.
jfpoilpret

2
배치 파일에는 세미콜론이 필요하지 않습니다. 그리고 호출을 사용해야하는 이유는 mvn 자체가 배치 파일이고 배치 파일이 호출로 서로 호출해야하기 때문입니다. 그렇지 않으면 제어가 호출자에게 반환되지 않습니다.
Pushkar

@ Gulzar Nazim-다른 배치 파일로 유지하고 싶지 않은 경우 if-else 문으로 모든 명령을 단일 배치 파일에 넣을 수 있는지 알고 있습니까?
Ng2-Fun

1
npm업데이트 및 protractor테스트 와 비슷한 작업을 시도했습니다 . Windows에서 파일을 인식 npm하고 파일 protractor이 될 때 까지이 답변이 적용되지 않았다고 생각합니다 .cmd.
joshden

45

명령 사이에 && 기호를 사용하여 첫 번째 명령이 성공한 경우에만 두 번째 명령을 실행할 수 있습니다. 자세한 정보는 여기 http://commandwindows.com/command1.htm


감사합니다. 위의 답변과 함께 시도해 보겠습니다.
Darren Greaves

maven 빌드가 실패하면 두 번째 스크립트의 실행이 중지됩니까?
Varun Achar

링크가 끊어졌습니다. "백엔드 서버가 제 시간에 응답하지 않았습니다. 앱 서버가 너무 바빠서 요청을 제 시간에 처리 할 수 ​​없습니다."
kevinji

1
@TheM Windows는 GUI 기반 응용 프로그램과 명령 기반 응용 프로그램을 구별합니다 (EXE 파일의 시작 부분에 플래그가 있음). 명령 줄에서 GUI 기반 응용 프로그램을 시작하면 명령 줄에서 완전히 분리되므로 항상 즉시 종료되는 것처럼 보입니다. 탐색기와 같은 GUI 프로그램에서 명령 기반 프로그램을 시작하면 항상 새 명령 줄이 표시됩니다. POSIX 시스템은 그러한 구별을하지 않으므로 동작이 더 일관됩니다.
coderforlife

2
@TheM이 문제를 해결하기 위해 사용할 수 있습니다start /B /WAIT calc
coderforlife

25

첫 번째 명령이 왜 중지되는지 확실하지 않습니다. 병렬로 만들 수 있다면 다음과 같은 것을 시도해 볼 수 있습니다

start cmd.exe /C 1.bat      
start cmd.exe /C 2.bat

7
명령이 실행 된 후에 쉘을 열어 두려면 /K대신에 사용하십시오 /C.
JellicleCat

필요가 사용할 수 없습니다 cmd.exestart그냥 start x.bat1할 것입니다.
user66001

23

방금 maven 테스트 스크립트를 실행하기 위해 배치 스크립트를 만드는 것과 동일한 작업을 수행했습니다. 문제는 mvn clean install ...로 maven scrips를 호출하는 것 자체가 스크립트이므로 mvn clean install을 호출해야합니다.

작동하는 코드

rem run a maven clean install
cd C:\rbe-ui-test-suite 
call mvn clean install
rem now run through all the test scripts
call mvn clean install -Prun-integration-tests -Dpattern=tc-login
call mvn clean install -Prun-integration-tests -Dpattern=login-1

오히려 호출 사용에 유의하십시오. 이것은 배치 파일에서 연속적인 maven 스크립트를 사용할 수있게합니다.


5

이중 앰퍼샌드를 사용하면 첫 번째 명령이 성공한 경우에만 두 번째 명령이 실행됩니다.

cd Desktop/project-directory && atom .

앰퍼샌드 하나만 사용하면 첫 번째 오류가 발생하더라도 두 명령을 모두 실행하려고합니다.

cd Desktop/project-directory & atom .

1

Windows에서 실행중인 경우 다음 명령을 사용할 수 있습니다.

드라이브:

cd "Script location"
schtasks /run /tn "TASK1"
schtasks /run /tn "TASK2"
schtasks /run /tn "TASK3"
exit

1

나는 당신의 질문에 대한 직접적인 대답을 모르지만, 만약 당신이이 스크립트를 많이 사용한다면, perl과 같은 더 강력한 언어를 배우는 것이 가치가있을 것입니다. Windows (예 : activestate, cygwin)에는 무료 구현이 있습니다. 나는 내 자신의 작업에 대한 초기 노력의 가치가 있음을 발견했습니다.

편집하다:

@Ferruccio가 제안한 것처럼 추가 소프트웨어를 설치할 수 없다면 vbscript 및 / 또는 javascript를 고려하십시오. 그것들은 Windows 스크립팅 호스트에 내장되어 있습니다.


고맙지 만 소프트웨어를 설치할 수 없습니다. 나는 엉뚱한 Windows 스크립팅 언어보다 더 강력한 것에 접근하기를 바란다. :-(
Darren Greaves

6
언제든지 vbscript 또는 javascript를 사용할 수 있습니다. 그것들은 Windows 스크립팅 호스트에 내장되어 있습니다.
Ferruccio

0

배치 파일에는 세미콜론이 필요하지 않습니다. 그리고 호출을 사용해야하는 이유는 mvn 자체가 배치 파일이고 배치 파일이 호출로 서로 호출해야하기 때문입니다. 그렇지 않으면 제어가 호출자에게 반환되지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.