Windowsでコマンドライン引数を使用してプログラムを起動する方法


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(引用符で囲みます")。プログラムパスに引用符が含まれていたため、タイトルとして解釈されました。明示的なタイトル(この場合は空"")を追加すると機能します。


別の方法は、/dスイッチを使用してパスを指定することです。具体的には:

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

/d引用符で囲まれていても、スイッチの後の最初の引数をパスとして受け取り、次の引数が引用符で囲まれていない場合、これは機能します。コマンド/プログラムとして認識されるものの後のすべては、そのコマンド/プログラムにパラメーターとして渡されます。コマンド/プログラムの名前にスペースが含まれている場合、VBox Headless.exe引用符が必要でタイトルとして認識されるため、これは機能しません。


全体として、最初の(明示的なタイトル)メソッドの方がおそらく優れています。マイクロソフト側の設計の選択としては不適切でした。「最初の引数は引用符で囲まれていますか?」ではなく、タイトルのスイッチを追加する必要がありました。


どうもありがとうございます:)私が見るようstart /bに、仮想マシンをバックグラウンドに置かないでください。それから私は何か他のものを考え出さなければなりません。
パトリク

出力を抑制したい場合(stdout)、>nul最後にa を追加します。>nul 2>nul最後に使用して、通常の出力とエラー(stderr)出力の両方を抑制します。ただし、コマンドプロンプトウィンドウは開いたままにしておく必要があります。
ボブ

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
ボブ

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
ボブ

うわー!cd私の時間を保存しました!
T.Todua 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.