다른 bat 파일의 백그라운드에서 bat 파일을 어떻게 실행합니까?


91

필요한 모든 프로그램을 시작하는 아침에 실행하는 "설치"스크립트가 있습니다. 이제 이들 중 일부는 추가 환경 설정이 필요하므로 작은 BAT 스크립트로 래핑해야합니다.

Windows XP에서 이러한 스크립트를 백그라운드에서 어떻게 실행합니까?

CALL env-script.bat 즉, 설정 스크립트는 환경 스크립트의 명령이 종료 된 후에 만 ​​계속 될 수 있습니다.

START/B env-script.bat 동일한 명령 프롬프트에서 CMD.exe의 다른 인스턴스를 실행하여 정말 지저분한 상태로 둡니다 (중첩 된 CMD.exe의 출력이 표시되고 키보드가 잠시 작동하지 않고 스크립트가 실행되지 않음).

START/B CMD env-script.bat동일한 결과를 산출합니다. CMD의 플래그가 내 청구서와 일치하지 않는 것 같습니다.

답변:


72

실제로 다음은 저에게 잘 작동하며 새 창을 만듭니다.

test.cmd :

@echo off
start test2.cmd
start test3.cmd
echo Foo
pause

test2.cmd

@echo off
echo Test 2
pause
exit

test3.cmd

@echo off
echo Test 3
pause
exit

에 매개 변수를 사용하여 그 결합 start과 같은, /min당신의 앞에 산란에 새 창을 원하지 않는 경우 모세는 지적했다.


1
좋습니다. 작동하지만 100 % 완벽하지는 않습니다. "Test 2"에서 "RETURN"을 누른 후 해당 창이 닫히지 않습니다. 어떤 아이디어?
Aaron Digulla

생성 된 배치에 "exit"를 추가하여 나중에 다시 닫을 수 있습니다. 죄송합니다, 그렇게 멀리 테스트하지 않았습니다. :)
Joey

사실 start script1.bat \ n start script2.bat \ n start scriptN.bat는 저에게 충분했습니다
andrej

142

2 살이지만 완전성을 위해 ...

표준 인라인 접근 방식 : (즉 &, Linux에서 사용할 때 얻을 수있는 동작 )

START /B CMD /C CALL "foo.bat" [args [...]]

참고 : 1. CALL.bat 파일과 짝을 이루는 이유는 일반적으로 이동하기 때문입니다 CMD /C CALL "foo.bat". 여기.); 2. .bat 파일 앞뒤의 큰 따옴표는 이름에 공백이 포함 된 경우에만 필요합니다. (이름은 그 가능성이 더 많은 경로 일 수 있습니다.)

출력을 원하지 않는 경우 :

START /B CMD /C CALL "foo.bat" [args [...]] >NUL 2>&1

배트가 독립 콘솔에서 실행되도록하려면 : (예 : 다른 창)

START CMD /C CALL "foo.bat" [args [...]]

나중에 다른 창이 계속 표시되도록하려면 :

START CMD /K CALL "foo.bat" [args [...]]

참고 : 열린 창을 일반 콘솔로 사용하려는 사용자가없는 한 실제로는 잘못된 형식입니다. 출력을보기 위해 창을 계속 유지 PAUSE하려면 bat 파일 끝에를 두는 것이 좋습니다 . 또는 아직 ^& PAUSE명령 줄 뒤에 추가 합니다.

START CMD /C CALL "foo.bat" [args [...]] ^& PAUSE

10
&"and then"(용어?) 연산자입니다. (예 : cmd1 & cmd2"cmd1"을 수행 한 다음 "cmd2"를 수행함을 의미합니다. &&연산자 와 달리 "cmd2"의 실행은 "cmd1"의 성공적인 종료에 의존하지 않습니다.) 는 소비되는 대신 CMD의 인수로 들어가 도록를 ^이스케이프합니다 . &START를 실행 한 동일한 콘솔에서 실행됩니다.
antak 2011

이것은 매우 도움이됩니다. 감사합니다. 다른 가이드 때문에, 단지 포트 리눅스 일부 스크립트에 대해이었다 start그리고 cmd내가 추구 모든 기능을 제공하지 않았다. 당신의 대답은 그것을 증명합니다.
Iterator

3
출력을 원하지 않는 경우 리디렉션을 이스케이프하여 CMD로 전달해야합니다. 또한 CALL이 필요하지 않습니다.START /B "" CMD /C "foo.bat" [args [...]] ^>nul 2^>^&1
dbenham

1
@dbenham : 당신이 말하는 것이 말이 되더라도 START /B "" CMD /C PING 127.0.0.1 >NUL상관없이 작동하는 것 같고 아무것도 출력되지 않습니다. (아마도 의 I / O 핸들을 CMD상속 하기 때문일 것 START입니다.) 차이점은 START의 (오류) 출력을 그대로 유지하려는 경우 입니다. 아마 좋은 생각입니다. CALL유지하는 것이 좋은 습관이라고 느꼈기 때문에 거기에 있습니다. (즉 CALL, 동기식 배트 호출에 사용하지 않으면 예측할 수없는 종료 코드가 발생 CALL
하므로이

7

START는 CMD 스크립트에서 백그라운드로 무언가를 실행하는 유일한 방법이므로 계속 사용하는 것이 좋습니다. / B 수정 자 대신 / MIN을 시도하여 새로 만든 창이 방해받지 않도록합니다. 또한 / LOW 또는 / BELOWNORMAL을 사용하여 우선 순위를 더 낮게 설정하여 시스템 응답 성을 향상시킬 수 있습니다.


-1 문제는 BAT 파일을 시작할 때 START가 새 창을 만들지 않는다는 것입니다. 대신 현재 창을 재사용하고 I / O 두 CMD 프로세스를 혼합합니다.
아론 Digulla

4
/ B 플래그를 사용하고 있기 때문에 새 창을 만들지 않습니다. 그것을 제거하십시오.
Moshe

5

전경 / 배경 용어 이외. 실행중인 창을 숨기는 또 다른 방법은 시스템에서 사용 가능한 경우 vbscript를 사용하는 것입니다.

DIM objShell
set objShell=wscript.createObject("wscript.shell")
iReturn=objShell.Run("yourcommand.exe", 0, TRUE)

이름을 sth.vbs로 지정하고 bat에서 호출하고 예약 된 작업에 넣는 등의 작업을 수행합니다. 개인적으로 내가 관리하는 모든 Windows 시스템에서 서두르지 않고 vbs를 비활성화합니다. :)


저의 특정 사용 사례에서 이것이 실제로 제가 작업 할 수있는 유일한 솔루션이었습니다 ...
Ben

0

새 C # Windows 응용 프로그램을 만들고 main에서이 메서드를 호출합니다.

public static void RunBatchFile(string filename)
{
    Process process = new Process();

    process.StartInfo.FileName = filename;

    // suppress output (command window still gets created)
    process.StartInfo.Arguments = "> NULL";

    process.Start();
    process.WaitForExit();
}

2
그는 비주얼 스튜디오를 설치가 필요하지 것처럼 음 ... 나는 간단하게 뭔가를 기대했다 ...
아론 Digulla

1
PowerShell을 100 % 사용할 수있을 때까지-C #은 정말 과잉입니다.
jim

2
Aaron : C # 컴파일러는 .NET Framework 2에 포함되어 있으므로 텍스트 편집기에서 일부 코드를 편집하고 컴파일 할 수 있습니다. 그래도 이것은 배치 파일에서 완벽하게 가능하기 때문에 C #은 과잉이라고 말하고 싶습니다.
Joey

0

이것은 내 Windows XP Home 설치에서 Unix 방식으로 작동합니다.

call notepad.exe & 

7
나는 이것이 우연히 만 작동한다고 생각하며 &는 필요하지 않습니다.
Sam Watkins

2
예, notepad.exe는 처음부터 비동기식입니다.
antak

0

마지막에이 옵션을 사용하면 실제로 매우 쉽습니다.

c : \ start BATCH.bat -WindowStyle 숨김


Windows 명령 start에는 -WindowStyle옵션 이 없습니다 .
Stephan

@Stephan Arreed. 이상한 경로 ( C:` instead of C : \ Windows`)는 인터넷 어딘가에서 도구를 찾아 하드 드라이브에 복사했음을 나타냅니다.
Aaron Digulla 2017
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.