Làm cách nào để bắt đầu một chương trình với các đối số dòng lệnh trên cmd với lệnh 'start' của Windows?


33

Tôi cần khởi động một chương trình (máy ảo) trong nền bằng startlệnh trên dòng lệnh 7 của Windows. Thông thường bạn sẽ làm điều này như thế:

start /b cmd yourprogram

Nhưng tôi cần phải vượt qua một số đối số và khi tôi làm như vậy (không có /bcờ để xem thông tin gỡ lỗi):

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

Tôi nhận được thông báo lỗi này:

Windows không thể tìm thấy '-startvm'. Hãy chắc chắn rằng bạn đã gõ tên chính xác, và sau đó thử lại.

Mặt khác, khi tôi thực hiện nó trong cửa sổ dòng lệnh hiện tại mà không startbắt đầu, máy ảo sẽ chạy bình thường - nhưng ở phía trước.

Giải pháp nào?

Câu trả lời:


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

Nếu bạn đọc danh sách tham số với 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.

Nó mong đợi một titlebao trong ngoặc kép ( "). Vì đường dẫn chương trình của bạn bao gồm các trích dẫn, nó được hiểu là tiêu đề. Thêm một tiêu đề rõ ràng (trong trường hợp này, trống, "") hoạt động.


Một phương pháp khác là sử dụng công /dtắc để chỉ định đường dẫn. Đặc biệt:

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

Nó xuất hiện để lấy đối số đầu tiên sau /dkhóa chuyển làm đường dẫn, ngay cả khi nó được trích dẫn và nếu đối số tiếp theo không được trích dẫn thì điều này hoạt động. Mọi thứ sau khi được nhận dạng là lệnh / chương trình được truyền dưới dạng tham số cho lệnh / chương trình đó. Lưu ý điều này sẽ không hoạt động nếu lệnh / chương trình có khoảng trắng trong tên, ví dụ VBox Headless.exe, vì điều đó sẽ yêu cầu dấu ngoặc kép và được công nhận là tiêu đề.


Nhìn chung, phương pháp đầu tiên (tiêu đề rõ ràng) có lẽ tốt hơn. Đó là một lựa chọn thiết kế tồi đối với Microsoft, họ thực sự nên thêm một công tắc cho tiêu đề chứ không phải là "đối số đầu tiên có trong dấu ngoặc kép không?".


Cảm ơn rất nhiều vì điều đó :) Mặc dù như tôi biết, start /bđừng đặt máy ảo vào nền. Tôi phải đến với một cái gì đó khác sau đó.
Patryk

Nếu bạn chỉ muốn chặn đầu ra ( stdout), hãy thêm a >nulvào cuối. Sử dụng >nul 2>nulở cuối để triệt tiêu cả đầu ra bình thường và đầu ra lỗi ( stderr). Cửa sổ nhắc lệnh phải được giữ mở, tuy nhiên.
Bob

1
@Patryk Nếu bạn không phiền khi sử dụng PowerShell, lệnh này sẽ mở một quy trình không có cửa sổ không được kết nối với quy trình sinh sản (powershell.exe). Do đó, cửa sổ PowerShell có thể bị đóng và VBoxHeadless sẽ tiếp tục chạy. PowerShell đi kèm với Windows 7.Start-Process -FilePath 'C:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe' -ArgumentList '-startvm "debian604 64"' -WindowStyle Hidden
Bob

3

Trên thực tế, câu trả lời được chấp nhận vẫn không phải là một giải pháp. Đóng cửa sổ cmd nơi lệnh được thực thi sẽ giết tiến trình vboxheadless với máy ảo đang chạy trong đó.

Sử dụng phương pháp bên dưới sẽ giúp PowerShell chạy một quy trình độc lập.

Trong cmd, chạy:

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

Điều này sẽ trả về một cái gì đó như:

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

Bây giờ lấy UUID và chạy như sau (vẫn tính bằng cmd):

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

Cảm ơn tác giả của bài viết này .


Trong nhận xét của tôi về câu trả lời của riêng tôi, tôi đã cung cấp một phương pháp thay thế cho "chạy VBox không đầu". Câu trả lời của tôi tự giải quyết câu hỏi "truyền đối số với start".
Bob

Ôi! cdTIẾT KIỆM GIỜ CỦA TÔI!
T.Todua
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.