Jeśli przeczytasz listę parametrów za pomocą 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.
Oczekiwany jest titlew cudzysłowie ( "). Ponieważ ścieżka programu zawierała cudzysłowy, została zinterpretowana jako tytuł. Dodanie wyraźnego tytułu (w tym przypadku pustego "") działa.
Alternatywną metodą jest użycie /dprzełącznika do określenia ścieżki. Konkretnie:
Wydaje się, że przyjmuje pierwszy argument za /dprzełącznikiem jako ścieżkę, nawet jeśli jest cytowany, a jeśli następny argument nie jest cytowany, to działa. Wszystko po tym, co jest rozpoznawane jako polecenie / program, jest przekazywane jako parametr do tego polecenia / programu. Uwaga: to nie zadziała, jeśli polecenie / program ma spacje w nazwie, np. VBox Headless.exePonieważ wymagałoby to cudzysłowów i byłoby rozpoznawane jako tytuł.
Ogólnie rzecz biorąc, pierwsza metoda (wyraźny tytuł) jest prawdopodobnie lepsza. To był zły wybór ze strony Microsoftu, oni naprawdę powinni byli dodać przełącznik tytułu zamiast „czy pierwszy argument jest zawarty w cudzysłowie?”.
Dziękuję bardzo za to :) Chociaż, jak widzę, start /bnie umieszczaj maszyny wirtualnej w tle. Muszę wymyślić coś innego.
Patryk
Jeśli chcesz po prostu pominąć output ( stdout), dodaj a >nulna końcu. Użyj >nul 2>nulna końcu, aby ukryć zarówno normalne wyjście, jak i wyjście błędu ( stderr). Jednak okno wiersza polecenia musi być otwarte.
Bob
1
@Patryk Jeśli nie masz nic przeciwko korzystaniu z PowerShell, to polecenie otworzy proces bez okien, który nie jest połączony z procesem spawnowania (powershell.exe). Dlatego okno PowerShell można zamknąć, a VBoxHeadless będzie nadal działać. PowerShell jest dostarczany z systemem Windows 7.Start-Process -FilePath 'C:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe' -ArgumentList '-startvm "debian604 64"' -WindowStyle Hidden
Bob
3
W rzeczywistości zaakceptowana odpowiedź wciąż nie jest rozwiązaniem. Zamknięcie okna cmd, w którym wykonano polecenie, spowoduje zabicie procesu bez vboxhead z uruchomioną maszyną wirtualną.
Zastosowanie poniższego podejścia sprawi, że PowerShell uruchomi niezależny proces.
W cmd uruchom:
cd "c:\Program Files\Oracle\VirtualBox"
vboxmanage list vms
W moim komentarzu do własnej odpowiedzi podałem już alternatywną metodę „bezobsługowego uruchamiania VBoxa”. Moja odpowiedź sama dotyczy pytania „przekazywanie argumentów za pomocą start”.
start /b
nie umieszczaj maszyny wirtualnej w tle. Muszę wymyślić coś innego.stdout
), dodaj a>nul
na końcu. Użyj>nul 2>nul
na końcu, aby ukryć zarówno normalne wyjście, jak i wyjście błędu (stderr
). Jednak okno wiersza polecenia musi być otwarte.Start-Process -FilePath 'C:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe' -ArgumentList '-startvm "debian604 64"' -WindowStyle Hidden
W rzeczywistości zaakceptowana odpowiedź wciąż nie jest rozwiązaniem. Zamknięcie okna cmd, w którym wykonano polecenie, spowoduje zabicie procesu bez vboxhead z uruchomioną maszyną wirtualną.
Zastosowanie poniższego podejścia sprawi, że PowerShell uruchomi niezależny proces.
W cmd uruchom:
Zwróci to coś w rodzaju:
Teraz weź UUID i uruchom następujące polecenie (nadal w cmd):
Dzięki autorowi tego artykułu .
źródło
start
”.cd
ZAPISZŁO MOJE GODZINY!