Windows の cmd で 'start' コマンドを使用してコマンドライン引数を使用してプログラムを起動するにはどうすればよいですか?

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' を見つけることができません。名前を正しく入力したことを確認し、もう一度お試しください。

一方、最初に なしで現在のコマンド ライン ウィンドウで実行すると、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

著者に感謝この記事

関連情報