Jak mogę uruchomić wiersz poleceń systemu Windows w tle?


160

Jak mogę uruchomić wiersz poleceń systemu Windows w tle, bez interakcji z aktywnym użytkownikiem?


1
Czy możesz określić, co chcesz zrobić? Czy chcesz wykonać polecenie w wierszu polecenia w tle, czy chcesz wykonać cały wiersz polecenia w tle, aby nie było to widoczne z pulpitu?
omnibrain

potrzebuję dwóch trzciny, aby wykonać polecenie w wierszu polecenia w tle, czy chcesz wykonać całą linię poleceń w tle
Mohammad AL-Rawabdeh

Odpowiedzi:


37

Twoje pytanie jest dość niejasne, ale na ServerFault znajduje się post, który może zawierać potrzebne informacje. Odpowiedź opisuje, jak uruchomić ukryte okno pliku wsadowego:

Zamiast tego możesz uruchomić go w trybie cichym, używając pliku skryptu systemu Windows. Metoda Run pozwala na uruchomienie skryptu w trybie niewidocznym. Utwórz .vbs plik taki jak ten

Dim WinScriptHost
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0
Set WinScriptHost = Nothing

i zaplanuj to. Drugi argument w tym przykładzie ustawia styl okna. 0 oznacza „ukryj okno”.


To jest doskonałe. SetPoint dla Logitech nigdy, NIGDY, nie zaczyna się od systemu Windows. Zaczynam ręcznie od około 3 lat. Czy to ważne, gdzie jest partia? Widziałem, jak niektórzy ludzie umieszczają ten typ pliku wsadowego w C lub w katalogu głównym.
ejbytes

244

Jest trochę późno, ale natknąłem się na to pytanie, szukając odpowiedzi i znalazłem to:

START /B program

który w systemie Windows jest najbliższy poleceniu Linuksa:

program &

Z konsoli systemu pomocy:

C:\>HELP START

Starts a separate window to run a specified program or command.

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.
    path        Starting directory.
    B           Start application without creating a new window. The
                application has ^C handling ignored. Unless the application
                enables ^C processing, ^Break is the only way to interrupt
                the application.

Jednym z problemów, które widziałem przy tym, jest to, że masz więcej niż jeden program piszący do okna konsoli, robi się to trochę zagmatwane i pomieszane.

Aby nie wchodził w interakcje z użytkownikiem, możesz przekierować dane wyjściowe do pliku:

START /B program > somefile.txt

3
Najbardziej podoba mi się ta odpowiedź, ponieważ nie otwiera innego okna poleceń
szczęśliwego

3
Wydaje mi się, że to nie działa, wydaje się, że tworzę tylko nową instancję cmd [?], Ale jeśli uruchomię ją tak, start /B "" programto zadziała ...
rogerdpack

1
@rogerdpack Zgadza się. Z jakiegoś powodu w systemie Windows 7 jest to format polecenia. „” Jest obowiązkowym parametrem tytułu.
ejbytes

10
Niestety, jeśli wyjdę z okna powłoki, w którym spawnowałem proces, wygląda na to, że proces również się kończy.
palswim

2
@Qwerty: Spójrz na MSDN dla SetConsoleCtrlHandler
Zan Lynx

68

Podejrzewam, że masz na myśli: Uruchom coś w tle i natychmiast uzyskaj wiersz poleceń z kontynuowanym uruchomionym programem.

START "" program

Który jest uniksowym odpowiednikiem

program &

7
jaki jest odpowiednik fg? Czy możemy zamknąć wiersz polecenia, a porgram nadal będzie działał?
Nenotlep

1
Ponadto chcę uruchomić program w wierszu polecenia i powracać do niego od czasu do czasu, jak na ekranie - czy można to zrobić? Muszę być w stanie zamknąć wiersz polecenia, ale działający program powinien być użyteczny.
Nenotlep

4
Co to za pusty parametr start? Bez niego to nie działa (wykonuje tylko nową instancję polecenia), ale startpomoc nic nie mówi na ten temat, stwierdza, że ​​wszystkie parametry są opcjonalne (lub nie rozumiem tego).
Dawid Ferenczy Rogožan

@DawidFerenczy startdziała dla mnie bez pustego parametru, ale wydaje mi się, że otrzymuję powłoki z osobną konfiguracją, gdy używam pustego parametru, ponieważ ustawienie, które zrobiłem, gdy nie miałem pustego parametru, nie jest używane, gdy go używam pusty parametr. Zastanawiam się, dlaczego używają osobnych konfiguracji?
HelloGoodbye,

@Paul START "" programuruchamia dla mnie polecenie w nowym terminalu, podczas gdy program &w Uniksie uruchamia polecenie i wypisuje dane wyjściowe na ten sam terminal.
HelloGoodbye,

15
START /MIN program 

powyższy jest dość podobny do swojego uniksowego odpowiednika program &


6

Możesz użyć tego (skomentowanego!) Skryptu PowerShell:

# Create the .NET objects
$psi = New-Object System.Diagnostics.ProcessStartInfo
$newproc = New-Object System.Diagnostics.Process
# Basic stuff, process name and arguments
$psi.FileName = $args[0]
$psi.Arguments = $args[1]
# Hide any window it might try to create
$psi.CreateNoWindow = $true
$psi.WindowStyle = 'Hidden'
# Set up and start the process
$newproc.StartInfo = $psi
$newproc.Start()
# Return the process object to the caller
$newproc

Zapisz go jako .ps1plik. Po włączeniu wykonywania skryptu (zobacz Włączanie skryptów w wiki tagu PowerShell ) możesz przekazać mu jeden lub dwa ciągi: nazwę pliku wykonywalnego i opcjonalnie linię argumentów. Na przykład:

.\hideproc.ps1 'sc' 'stop SomeService'

Potwierdzam, że działa to w systemie Windows 10.


4
yep start / b już nie działa.
Sajuuk

3

W ten sposób mój wewnętrzny serwer PHP przechodzi w tło. Więc technicznie powinno to działać dla wszystkich.

start /B "" php -S 0.0.0.0:8000 &

Dzięki


1

Jeśli chcesz, aby program wiersza polecenia działał bez wiedzy użytkownika, zdefiniuj go jako usługę systemu Windows i będzie on działał zgodnie z harmonogramem.


4
jak to robisz
barlop

Możesz też ustawić to jako zaplanowane zadanie - Panel sterowania-> Narzędzia administracyjne-> Zaplanowane zadania lub użyj schtaskspolecenia w systemie Windows XP i nowszych (ostrzeżenie: schtasksjest skomplikowane).
LawrenceC

0

Powiązana odpowiedź z 2 przykładami:

  1. Poniżej otwiera calc.exe:

nazwij START / B „my calc” „calc.exe”

  1. Czasami pierwszy plan nie jest pożądany, wtedy biegasz zminimalizowany jak poniżej:

nazwij START / MIN „my mongod” „% ProgramFiles% \ MongoDB \ Server \ 3.4 \ bin \ mongod.exe”


Wydaje się, że nie jest to zminimalizowane:call Start /MIN "c" "calc.exe"
moondra

1
poprawne, działa dla notatnika: zadzwoń do początku / min "n" "notepad.exe"
Manohar Reddy Poreddy

Działa to dla aplikacji okienkowych, ale nie dla aplikacji konsolowych. Liczby w jednej, może przejść SW_*do CreateProcessWurządzeń STARTUPINFO::wShowWindow(włącznie SW_HIDE).
0xC0000022L

Co to jest pełne polecenie, z powyższym jak „start” lub inne narzędzie? czy musimy napisać inny program?
Manohar Reddy Poreddy


-2

właśnie natknąłem się na ten wątek Windows 7, używając power shell, uruchamia pliki wykonywalne w tle, dokładnie tak samo jak nazwa pliku unix &

przykład: start -NoNewWindow nazwa pliku

pomóc zacząć

NAME Start-Process

SYNTAX Start-Process [-FilePath] [[-ArgumentList]] [-Credential] [-WorkingDirectory] [-LoadUserProfile] [-NoNewWindow] [-PassThru] [-RedirectStandardError] [-RedirectStandardInput] [-Reditandand] [-WindowStyle {Normalny | Ukryty | Zminimalizowane | Maksymalizacja}] [-UseNewEnvironment] []

Start-Process [-FilePath] <string> [[-ArgumentList] <string[]>] [-WorkingDirectory <string>] [-PassThru] [-Verb
<string>] [-Wait] [-WindowStyle <ProcessWindowStyle> {Normal | Hidden | Minimized | Maximized}]
[<CommonParameters>]

ALIASY zaczynają się soki

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.