[batch-file] Windows 배치 파일 명령을 비동기 적으로 실행

내가 있다면

  • foo.exe
  • bar.exe
  • baz.exe

이전 파일이 중지 될 때까지 기다리지 않고 배치 파일에서 비동기식으로 모든 파일을 어떻게 실행합니까?



답변

START명령을 사용하여 각 프로그램을 실행하면 필요한 것을 얻을 수 있습니다.

START "title" [/D path] [options] "command" [parameters]

모든 START호출은 /WAIT스위치로 실행되지 않는 한 해당 매개 변수에 제공된 명령을 실행하고 즉시 리턴합니다 .

이는 명령 줄 앱에 적용됩니다. 명령 줄이없는 앱은 어쨌든 즉시 반환되므로 모두 비동기 적으로 실행하려면을 사용하십시오 START.


답변

이전 답변 몇 가지를 결합하면 시도해 볼 수 있습니다. start /b cmd /c foo.exe 있습니다.

간단한 예를 들어, java / groovy / grails / gradle 버전을 인쇄하려면 배치 파일로이를 수행 할 수 있습니다.

@start /b cmd /c java -version
@start /b cmd /c gradle -version
@start /b cmd /c groovy -version
@start /b cmd /c grails -version

Process Explorer (Sysinternals)와 같은 것이 있다면 위의 명령에 따라 java 프로세스를 사용하여 몇 개의 자식 cmd.exe 프로세스가 각각 표시됩니다. 출력은 완료된 순서대로 화면에 인쇄됩니다.

start /b :  Start application without creating a new window. The
             application has ^C handling ignored. Unless the application
             enables ^C processing, ^Break is the only way to interrupt
             the application

cmd /c : Carries out the command specified by string and then terminates


답변

새 창을 시작하지 않고 start 명령을 사용하여 백그라운드 프로세스를 생성 할 수 있습니다.

start /b foo.exe

새로운 프로세스는 CTRL-C로 중단 할 수 없습니다. CTRL-BREAK를 사용하거나 창을 닫거나 작업 관리자를 통해서만 죽일 수 있습니다.


답변

다음 줄을 사용하여 배치 파일을 만듭니다.

start foo.exe
start bar.exe
start baz.exe

시작 명령은 3 개 명령을 비동기 적으로 실행됩니다, 그래서 새 창에서 명령을 실행합니다.


답변

START 명령을 사용하십시오 .

start [programPath]

프로그램 경로에 공백이 있으면 따옴표를 추가해야합니다. 이 경우 오프닝 콘솔 창의 제목을 제공해야합니다.

start "[title]" "[program path]"

인수를 제공해야하는 경우 끝에 명령 따옴표 외부에 추가하십시오.

start "[title]" "[program path]" [list of command args]

새 콘솔 창을 열지 않으려면 / b 옵션을 사용하십시오 (이 경우 CTRL-C를 사용하여 응용 프로그램을 중단 할 수 없음)


답변

세 번째 (및 잠재적으로 훨씬 쉬운) 옵션이 있습니다. 단일 프로그램의 여러 인스턴스를 스핀 업하려는 경우 Xargs 또는 GNU Parallel과 같은 Unix 스타일 명령 프로세서를 사용하면 상당히 간단한 프로세스를 만들 수 있습니다.

PPX2라는 win32 Xargs 클론이 있습니다. 이 매우 간단합니다.

예를 들어, 비디오 파일의 디렉토리를 트랜스 코딩하려면 다음 명령을 실행할 수 있습니다.

dir /b *.mpg |ppx2 -P 4 -I {} -L 1 ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4"

이것을 분리 dir /b *.mpg하고 현재 디렉토리에서 .mpg 파일 |목록을 가져 오면 연산자는이 목록을 ppx2로 파이프 한 다음 병렬로 실행할 일련의 명령을 빌드합니다. -P 4운영자가 여기에 지정한대로 한 번에 4 개 . 그만큼-L 1연산자는 한 번에는 FFmpeg에 나열 우리의 디렉토리의 한 줄을 보낼 수 ppx2을 알려줍니다.

그런 다음 명령 줄 ( ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4")을 작성하면됩니다.{} 디렉토리 목록의 각 행이 자동으로 대체됩니다.

모든 경우에 보편적으로 적용되는 것은 아니지만 위에서 설명한 배치 파일 해결 방법을 사용하는 것보다 훨씬 쉽습니다. 물론 파일 목록을 다루지 않으면 텍스트 파일이나 다른 프로그램의 내용을 pxx2의 입력으로 파이프 할 수도 있습니다.


답변

나는 아무것도 할 수 없었습니다. 배트 스크립트를 시작하기 위해 powershell을 사용했습니다. 때로는 심지어 cmd / c를 시작해도 왜 그런지 모르겠습니다 ..start cmd / c notepad & exit

start-Process "c:\BACKUP\PRIVATE\MobaXterm_Portable\MobaXterm_Portable.bat" -WindowStyle Hidden