2009-03-16 6 views
77

나는 아침에 내가 필요한 모든 프로그램을 시작하는 "설치"스크립트를 가지고있다. 이제는 환경 설정을 추가로해야하기 때문에 작은 BAT 스크립트로 포장해야합니다.다른 박쥐 파일의 백그라운드에서 박쥐 파일을 실행하려면 어떻게해야합니까?

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

CALL env-script.bat은 동기식으로 실행됩니다. 즉, 설치 스크립트는 env-script의 명령이 종료 된 후에 만 ​​계속 진행할 수 있습니다.

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

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

답변

62

은 다음 나를 위해 잘 작동하고 새 창 생성 :

test.cmd :

@echo off 
call "cmd /c start test2.cmd" 
call "cmd /c start test3.cmd" 
echo Foo 
pause 

test2.cmd

@echo off 
echo Test 2 
pause 
exit 
새 창은 당신의 앞에 산란을하지 않으려면 모세는 지적

/min로, start에 매개 변수 등을

@echo off 
echo Test 3 
pause 
exit 

결합이

을 test3.cmd.

이 내 Windows   XP 홈 설치에서 작동
+1

좋아,이 작품은 100 % 완벽하지 않습니다 : "시험 2"에서 "돌아 가기"를 누르면, 그 창은 닫히지 않습니다. 어떤 아이디어? –

+0

스폰 된 배치에 "exit"를 추가하여 나중에 닫을 수 있습니다. 미안, 멀리 테스트하지 않았다 :) – Joey

5

START는 CMD 스크립트에서 백그라운드로 실행하는 유일한 방법이므로 계속 사용하는 것이 좋습니다./B 수정 자 대신에/MIN을 시도하면 새로 만든 창에서 문제가되지 않습니다. 또한 우선 순위를/LOW 또는/BELOWNORMAL로 낮추면 시스템 응답 속도가 향상됩니다.

+0

-1 문제는 당신이 BAT 파일을 시작할 때 START가 새 창을 생성하지 않는다는 것입니다; 대신 현재 창을 재사용하고 I/O 두 개의 CMD 프로세스를 혼합합니다. –

+4

/B 플래그를 사용 중이므로 새 창이 생성되지 않습니다. 그것을 제거하십시오. – Moshe

0

주에서이 방법을 새로운 C# Windows 응용 프로그램을 만들고 전화 : 사실

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(); 
} 
+1

Uhm ... Visual Studio를 설치할 필요가 없을만큼 간단하다고 생각 했었습니다 ... –

+1

PowerShell을 사용할 수있을 때까지 C#은 과장되었습니다. – jim

+2

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

0

, 유닉스 방법 :

call notepad.exe & 
+6

나는 이것이 우연히 만 작동하고, &는 필요 없다고 생각한다. –

+2

예, notepad.exe는 (는) 비동기식입니다. – antak

+3

이것은 웃음에 좋았습니다! –

119

2 년 오래 된,하지만 완전성에 대한 ...

표준, 인라인 방식 : (즉, 행동을 당신에게 1. CALL입니다 : 리눅스에서 &를 사용하는 경우 '

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

참고) 얻을 거라고 .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을 박쥐 파일의 끝에 두는 것이 좋습니다. 심지어 아직 명령 행 후 ^& PAUSE을 추가 전경/배경 기간에 비해

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

'^ &'는 무엇을합니까? –

+10

'&'는 "다음"(용어?) 연산자입니다. (예 :'cmd1 & cmd2'는 "cmd1"과 "cmd2"를 의미합니다.)'&&'연산자와 달리 "cmd2"의 실행은 "cmd1"의 성공적인 종료에 의존하지 않습니다.)'^'는 '&'명령을 사용하여 CMD의 인수에 들어가고 START를 실행 한 동일한 콘솔에서 실행하지 않도록합니다. – antak

+0

감사합니다. 감사합니다. 나는'start'와'cmd'에 대한 다른 안내서가 내가 찾던 모든 기능을 제공하지 않았기 때문에 리눅스로 일부 스크립트를 이식하려고했습니다. 당신의 대답은 그것을 손톱으로 가리 킵니다. – Iterator

2

기타. 실행중인 창을 숨기는 또 다른 방법은 vbscript를 통해 시스템에서 여전히 사용할 수있는 경우입니다. sth.vbs로

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

이름을 내가 관리 :

+0

VBScript와 흡사해서 작업이 완료되었습니다. 좋은! – MateusBR

+0

내 특정 사용 사례에 대해, 이것은 실제로 내가 일할 수있는 유일한 해결책이었습니다 ... – Ben

0

가 실제로 꽤입니다 PersonallyI'll 모든 Windows 시스템에서 더 서둘러 VBS를 비활성화 등 sheduled 작업에 넣어, 박쥐에서 호출 마지막에이 옵션을 쉽게 :

C : \ BATCH.bat -WindowStyle 숨겨진을 시작

+0

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

+0

@ 스탄 판결. 홀수 경로 ('C : \ Windows \ '대신'C : \')는 그가 인터넷상의 어딘가에있는 도구를 발견하여 그의 하드 드라이브에 복사했음을 암시합니다. –

관련 문제