start /b "" "c:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe" -startvm "debian604 64"
Jeśli odczytasz listę parametrów z 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.
Oczekuje title
ujętego w cudzysłowie ("
). Ponieważ Twoja ścieżka programu zawierała cudzysłowy, został on zinterpretowany jako tytuł. Dodanie jawnego tytułu (w tym przypadku pustego, ""
) działa.
Alternatywną metodą jest użycie przełącznika /d
do określenia ścieżki. Konkretnie:
start /b /d "c:\Program Files\Oracle\VirtualBox\" VBoxHeadless.exe -startvm "debian604 64"
Po przełączniku /d
jako ścieżkę przyjmuje się pierwszy argument, nawet jeśli jest on cytowany, a jeśli następny argument nie jest cytowany, to działa. Wszystko po tym, co zostało rozpoznane jako polecenie/program jest przekazywane jako parametr do tego polecenia/programu. Zauważ, że to nie zadziała, jeśli polecenie/program ma w nazwie spacje, np. VBox Headless.exe
, ponieważ wymagałoby to cytowania i byłoby rozpoznawane jako tytuł.
Ogólnie rzecz biorąc, pierwsza (jawny tytuł) metoda jest prawdopodobnie lepsza. To był zły wybór projektu ze strony Microsoftu, naprawdę powinni byli dodać przełącznik dla tytułu, a nie “czy pierwszy argument jest zawarty w cudzysłowie?”.