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


33

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에서 시작 하지 않고 가상 머신은 정상적으로 실행되지만 전경에서는 실행합니다.

어떤 솔루션?

답변:


36
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따옴표로 묶여 ( "). 프로그램 경로에 따옴표가 포함되어 있으므로 제목으로 해석됩니다. 명시 적 제목 (이 경우에는 empty "")을 추가하면 작동합니다.


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

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

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


전반적으로 첫 번째 (명백한 제목) 방법이 더 좋습니다. 마이크로 소프트 측에서는 잘못된 디자인을 선택했다. "따옴표로 묶은 첫 번째 인수가 아닌"제목 대신 스위치를 추가해야했다.


알다시피 start /b가상 머신을 백그라운드에 두지 마십시오. 그때 다른 것을 생각해 내야합니다.
Patryk

출력 ( stdout) 을 표시하지 않으려면 >nul끝에 추가하십시오 . >nul 2>nul마지막에 정상 출력과 오류 ( stderr) 출력 을 억제 하려면 사용하십시오 . 그러나 명령 프롬프트 창이 열려 있어야합니다.
Bob

1
@Patryk PowerShell을 사용하지 않아도이 명령은 스폰 (powershell.exe) 프로세스에 연결되지 않은 창없는 프로세스를 엽니 다. 따라서 PowerShell 창을 닫을 수 있으며 VBoxHeadless가 계속 실행됩니다. PowerShell은 Windows 7과 함께 제공됩니다.Start-Process -FilePath 'C:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe' -ArgumentList '-startvm "debian604 64"' -WindowStyle Hidden
Bob

3

실제로 받아 들여진 대답은 여전히 ​​해결책이 아닙니다. 명령이 실행 된 cmd 창을 닫으면 실행중인 가상 머신이있는 vboxheadless 프로세스가 종료됩니다.

아래의 접근 방식을 사용하면 PowerShell 이 독립적 인 프로세스를 실행 하게 됩니다.

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

이 기사 의 저자에게 감사합니다 .


에서 내 자신의 대답에 내 의견 난 이미 "headlessly 중 VBOX을 실행"에 대한 대체 방법을 제공했습니다. 내 대답 자체는 "인수를 인수로 전달하는"문제를 다룹니다 start.
Bob

와우! cd내 시간을 절약했습니다!
T.Todua
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.