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

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

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

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

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

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



답변

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

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당신의 앞에 산란에 새 창을 원하지 않는 경우 모세는 지적했다.


답변

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


답변

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


답변

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

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

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


답변

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


답변

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

call notepad.exe &


답변

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

c : \ start BATCH.bat -WindowStyle 숨김