วิธีการเริ่มโปรแกรมด้วยอาร์กิวเมนต์บรรทัดคำสั่งใน Windows 'cmd ด้วยคำสั่ง' start '?


32

ฉันต้องเริ่มโปรแกรม (เครื่องเสมือน) ในพื้นหลังด้วยstartคำสั่งบนบรรทัดคำสั่ง 7 ของ Windows โดยปกติแล้วคุณจะทำเช่นนี้:

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เนื่องจากจะต้องมีเครื่องหมายคำพูดและได้รับการยอมรับว่าเป็นชื่อ


โดยรวมแล้ววิธีแรก (ชื่อที่ชัดเจน) น่าจะดีกว่า มันเป็นตัวเลือกการออกแบบที่ไม่ดีในส่วนของ Microsoft พวกเขาควรเพิ่มสวิตช์สำหรับชื่อแทน "คืออาร์กิวเมนต์แรกที่อยู่ในเครื่องหมายคำพูด?"


ขอบคุณมากสำหรับสิ่งที่ :) แม้ว่าฉันstart /bจะรู้ว่าไม่ได้ใส่เครื่องเสมือนในพื้นหลัง ฉันต้องคิดอย่างอื่นอีกแล้ว
Patryk

หากคุณต้องการระงับเอาต์พุต ( stdout) ให้เพิ่ม a >nulไปยังจุดสิ้นสุด ใช้>nul 2>nulที่ส่วนท้ายเพื่อระงับเอาต์พุตปกติและเอาต์พุต error ( stderr) อย่างไรก็ตามหน้าต่างพรอมต์คำสั่งจะต้องเปิดอยู่อย่างไรก็ตาม
บ๊อบ

1
@Patryk หากคุณไม่สนใจการใช้ PowerShell คำสั่งนี้จะเปิดกระบวนการแบบไม่มีหน้าต่างที่ไม่ได้เชื่อมต่อกับกระบวนการวางไข่ (powershell.exe) ดังนั้นหน้าต่าง PowerShell สามารถปิดได้และ VBoxHeadless จะยังคงทำงานต่อไป PowerShell มาพร้อมกับ Windows 7Start-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

ขอขอบคุณที่เขียนบทความนี้


ในความคิดเห็นของฉันในคำตอบของฉันเองฉันได้ให้วิธีการอื่นสำหรับ "การใช้งาน VBox อย่างไร้จุดหมาย" คำตอบของฉันเองตอบคำถาม "ผ่านการโต้แย้งด้วยstart"
บ๊อบ

ว้าว! cdบันทึกชั่วโมงของฉัน!
T.Todua
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.