Windows cmd에서 'start' 명령을 사용하여 명령줄 인수를 사용하여 프로그램을 시작하는 방법은 무엇입니까?

Windows cmd에서 'start' 명령을 사용하여 명령줄 인수를 사용하여 프로그램을 시작하는 방법은 무엇입니까?

startWindows 7 명령줄의 명령을 사용하여 백그라운드에서 프로그램(가상 머신)을 시작해야 합니다 . 일반적으로 다음과 같이 수행합니다.

start /b cmd yourprogram

하지만 몇 가지 인수를 전달해야 하며 그렇게 하면 다음과 같이 됩니다( /b디버그 정보를 보기 위한 플래그 없음).

start C:\Users\USER>start "c:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe" -startvm "debian604 64"

다음 오류 메시지가 나타납니다.

Windows에서 '-startvm'을 찾을 수 없습니다. 이름을 올바르게 입력했는지 확인한 후 다시 시도하세요.

반면에 start처음에 없이 현재 명령줄 창에서 이 작업을 수행하면 가상 머신이 정상적으로 실행되지만 전경에서는 실행됩니다.

어떤 해결책이 있습니까?

답변1

start /b "" "c:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe" -startvm "debian604 64"

다음을 사용하여 매개변수 목록을 읽는 경우 start /?:

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
      [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
      [command/program] [parameters]

    "title"     Title to display in window title bar.
    command/program
                If it is an internal cmd command or a batch file then
                the command processor is run with the /K switch to cmd.exe.
                This means that the window will remain after the command
                has been run.

                If it is not an internal cmd command or batch file then
                it is a program and will run as either a windowed application
                or a console application.

    parameters  These are the parameters passed to the command/program.

title따옴표( )로 묶인 것이 필요합니다 ". 프로그램 경로에 따옴표가 포함되어 있으므로 제목으로 해석되었습니다. 명시적인 제목(이 경우 비어 있음 "")을 추가하면 작동합니다.


또 다른 방법은 /d스위치를 사용하여 경로를 지정하는 것입니다. 구체적으로:

start /b /d "c:\Program Files\Oracle\VirtualBox\" VBoxHeadless.exe -startvm "debian604 64"

/d인용된 경우에도 스위치 뒤의 첫 번째 인수를 경로로 사용하는 것으로 보이며 , 다음 인수가 인용되지 않은 경우에는 작동합니다. 명령/프로그램으로 인식된 이후의 모든 내용은 해당 명령/프로그램에 매개변수로 전달됩니다. 명령/프로그램 이름에 공백이 있는 경우(예: ) VBox Headless.exe, 이는 따옴표가 필요하고 제목으로 인식되기 때문에 작동하지 않습니다.


전반적으로 첫 번째(명시적 제목) 방법이 더 나을 것입니다. Microsoft 측에서는 잘못된 디자인 선택이었습니다. "첫 번째 인수가 따옴표로 묶여 있습니까?" 대신 제목 스위치를 추가했어야 했습니다.

답변2

실제로 허용되는 답변은 아직 해결책이 아닙니다. 명령이 실행된 cmd 창을 닫으면 실행 중인 가상 머신이 있는 vboxheadless 프로세스가 종료됩니다.

아래 접근 방식을 사용하면파워셸독립적인 프로세스를 실행합니다.

cmd에서 다음을 실행합니다.

cd "c:\Program Files\Oracle\VirtualBox"
vboxmanage list vms

그러면 다음과 같은 내용이 반환됩니다.

"Webserver LAP" {8748b594-7e2d-4d8d-8785-999940766754}

이제 UUID를 가져와 다음을 실행합니다(계속 cmd에서).

powershell start-process 'C:\program files\oracle\virtualbox\vboxheadless' '-s 8748b594-7e2d-4d8d-8785-999940766754' -WindowStyle Hidden

작가님 덕분에이 기사.

관련 정보