2012-04-18 14:53:51 +0000 2012-04-18 14:53:51 +0000
36
36

Windowsのcmdで'start'コマンドでコマンドライン引数でプログラムを起動するには?

私はWindowsの7のコマンドラインでstartコマンドでバックグラウンドでプログラム(仮想マシン)を起動する必要があります。通常はこのようにします:

start /b cmd yourprogram

しかし、私はいくつかの引数を渡す必要があり、私はこのように(デバッグ情報を見るために/bフラグなしで)そうするとき:

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

私はこのエラーメッセージを取得します:

Windowsは’-startvm'を見つけることができません。

Windows cannot find ‘-startvm’ というエラーメッセージが表示されます。

回答 (2)

40
40
40
2012-04-18 15:39:49 +0000
start /b "" "c:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe" -startvm "debian604 64"
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.
start /b /d "c:\Program Files\Oracle\VirtualBox\" VBoxHeadless.exe -startvm "debian604 64"

start /?でパラメータリストを読むと、引用符で囲まれたtitle(")を想定しています。プログラムのパスには引用符が含まれているので、それがタイトルと解釈されてしまいます。明示的なタイトル(この場合は空の "")を追加すると動作します。


もう一つの方法は、/d スイッチを使ってパスを指定する方法です。具体的には:

&001

これは、/dスイッチの後の最初の引数が引用符で囲まれていても、パスとみなされ、次の引数が引用符で囲まれていない場合には、これが動作します。コマンド/プログラムとして認識されるものの後の全ては、そのコマンド/プログラムのパラメータとして渡されます。コマンド/プログラムの名前にスペースがある場合は動作しないことに注意してください、例えば VBox Headless.exe のように、引用符を必要とし、タイトルとして認識されるので。これはマイクロソフト側の悪いデザイン選択でした。彼らは本当に “最初の引数は引用符で囲まれていますか?"ではなく、タイトルのためのスイッチを追加すべきでした。

3
3
3
2013-10-23 11:32:21 +0000

実際には、受け入れられている答えはまだ解決策ではありません。コマンドが実行された cmd ウィンドウを閉じると、実行中の仮想マシンを含む vboxheadless プロセスが kill されます。

以下のアプローチを使用すると、 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

この記事 の著者に感謝します。