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?

Mohammad AL-Rawabdeh
źródło
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
Duplikuje to pytanie w usłudze ServerFault .
Dan Dascalescu,

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”.

nhinkle
źródło
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
Nowikaina
źródło
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 &
Paul Douglas
źródło
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 &

Siva Sankaran
źródło
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.

Ben N.
źródło
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

Suyash Jain
źródło
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.

CarlF
źródło
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”

Manohar Reddy Poreddy
źródło
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
-1

Prawidłowy sposób wykonania tej czynności można znaleźć w tym linku:

Jak uruchomić zaplanowane zadanie bez wyświetlania okna poleceń

Podsumowując, musisz zaznaczyć pole wyboru „Uruchom bez względu na to, czy użytkownik jest zalogowany”. Poświadczenia użytkownika zadania należy wprowadzić po naciśnięciu przycisku „OK”.

Daniel Alonso
źródło
-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

nocnik
źródło