Wie kann ich eine Windows-Befehlszeile im Hintergrund ausführen?

160

Wie kann ich eine Windows-Befehlszeile im Hintergrund ausführen, ohne mit dem aktiven Benutzer zu interagieren?

Mohammad AL-Rawabdeh
quelle
1
Können Sie angeben, was Sie tun möchten? Möchten Sie einen Befehl in der Befehlszeile im Hintergrund ausführen oder möchten Sie die gesamte Befehlszeile im Hintergrund ausführen, sodass sie vom Desktop aus nicht sichtbar ist?
Omnibrain
Ich brauche zwei Cane einen Befehl in der Befehlszeile im Hintergrund ausführen oder möchten Sie die gesamte Befehlszeile im Hintergrund ausführen
Mohammad AL-Rawabdeh
Dupliziert diese Frage auf ServerFault .
Dan Dascalescu

Antworten:

37

Ihre Frage ist ziemlich vage, aber es gibt einen Beitrag auf ServerFault, der möglicherweise die benötigten Informationen enthält. Die Antwort dort beschreibt, wie ein verstecktes Batch-Dateifenster ausgeführt wird:

Sie können es stattdessen im Hintergrund mithilfe einer Windows-Skriptdatei ausführen. Mit der Run-Methode können Sie ein Skript im unsichtbaren Modus ausführen. Erstellen Sie eine .vbs Datei wie diese

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

und planen Sie es. Das zweite Argument in diesem Beispiel legt den Fensterstil fest. 0 bedeutet "Fenster verstecken".

nhinkle
quelle
Dies ist perfekt. SetPoint für Logitech startet NIEMALS mit Windows. Ich starte es jetzt seit ungefähr 3 Jahren manuell. Ist es wichtig, wo die Charge ist? Ich habe einige Leute gesehen, die diese Art von Batch-Datei in C oder im Stammverzeichnis abgelegt haben.
Ejbytes
244

Das ist ein bisschen spät, aber ich bin gerade auf diese Frage gestoßen, als ich selbst nach der Antwort gesucht habe, und habe Folgendes gefunden:

START /B program

Dies ist unter Windows der Befehl, der dem Linux-Befehl am nächsten kommt:

program &

Über das Konsolen-Hilfesystem:

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.

Ein Problem, das ich dabei gesehen habe, ist, dass Sie mehr als ein Programm im Konsolenfenster haben, es wird etwas verwirrend und durcheinander.

Damit es nicht mit dem Benutzer interagiert, können Sie die Ausgabe in eine Datei umleiten:

START /B program > somefile.txt
Novicaine
quelle
3
Diese Antwort gefällt mir am besten, weil sie kein weiteres Befehlsfenster
öffnet
3
Dies scheint bei mir nicht zu funktionieren, es scheint nur eine neue Cmd-Instanz zu erstellen [?], Aber wenn ich es so laufen start /B "" program
lasse,
1
@rogerdpack Das stimmt. Aus irgendeinem Grund ist dies unter Windows 7 das Befehlsformat. Das "" ist der obligatorische Titelparameter.
Ejbytes
10
Wenn ich das Shell-Fenster verlasse, in dem ich den Prozess erzeugt habe, sieht es leider so aus, als würde der Prozess ebenfalls beendet.
Palswim
2
@Qwerty: Sehen Sie sich die MSDN für SetConsoleCtrlHandler
Zan Lynx an.
68

Ich vermute, Sie meinen: Führen Sie etwas im Hintergrund aus und rufen Sie die Befehlszeile sofort wieder auf, während das gestartete Programm fortgesetzt wird.

START "" program

Welches ist das Unix-Äquivalent von

program &
Paul Douglas
quelle
7
Was ist das fg-Äquivalent? Können wir die Eingabeaufforderung schließen und das Programm wird weiterhin ausgeführt?
Nenotlep
1
Außerdem möchte ich ein Programm über die Eingabeaufforderung ausführen und von Zeit zu Zeit darauf zurückgreifen, wie auf dem Bildschirm. Ist dies möglich? Ich muss in der Lage sein, die Eingabeaufforderung zu schließen, aber das laufende Programm brauchbar zu halten.
Nenotlep
4
Was ist das für ein leerer Parameter start? Es funktioniert nicht ohne es (führt nur eine neue Befehlsinstanz aus), aber startdie Hilfe sagt nichts darüber aus, es besagt, dass alle Parameter optional sind (oder ich verstehe es nicht).
Dawid Ferenczy Rogožan
@DawidFerenczy startfunktioniert für mich ohne den leeren Parameter, aber wenn ich den leeren Parameter verwende, bekomme ich anscheinend eine Shell mit einer separaten Konfiguration, da eine Einstellung, die ich vorgenommen habe, als ich den leeren Parameter nicht hatte, nicht verwendet wird, wenn ich sie verwende der leere Parameter. Ich frage mich, warum sie separate Konfigurationen verwenden?
HelloGoodbye
@Paul START "" programstartet einen Befehl in einem neuen Terminal für mich, während program &in Unix der Befehl ausgeführt wird und die Ausgabe auf dem gleichen Terminal gedruckt wird.
HelloGoodbye
15
START /MIN program 

Das obige ist dem Unix-Gegenstück ziemlich nahe program &

Siva Sankaran
quelle
6

Sie können dieses (kommentierte!) PowerShell-Skript verwenden:

# 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

Speichern Sie es als .ps1Datei. Nachdem Sie die Skriptausführung aktiviert haben (siehe Aktivieren von Skripten im PowerShell-Tag-Wiki ), können Sie eine oder zwei Zeichenfolgen übergeben: den Namen der ausführbaren Datei und optional die Argumentzeile. Zum Beispiel:

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

Ich bestätige, dass dies unter Windows 10 funktioniert.

Ben N
quelle
4
yep start / b funktioniert nicht mehr.
Sajuuk
3

So geht mein PHP-interner Server in den Hintergrund. Also sollte es technisch für alle funktionieren.

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

Vielen Dank

Suyash Jain
quelle
1

Wenn Sie möchten, dass das Befehlszeilenprogramm ausgeführt wird, ohne dass der Benutzer etwas davon weiß, definieren Sie es als Windows-Dienst und es wird nach einem Zeitplan ausgeführt.

CarlF
quelle
4
Wie machst du das?
Barlop
Alternativ können Sie eine geplante Aufgabe erstellen - Systemsteuerung -> Verwaltung -> Geplante Aufgaben oder den schtasksBefehl in Windows XP und höher verwenden (Warnung: schtasksist kompliziert).
LawrenceC
0

Eine verwandte Antwort mit 2 Beispielen:

  1. Unten wird calc.exe geöffnet:

Rufe START / B "my calc" "calc.exe" auf

  1. Manchmal ist der Vordergrund nicht erwünscht, dann läuft man minimiert wie folgt:

Rufen Sie START / MIN "my mongod" "% ProgramFiles% \ MongoDB \ Server \ 3.4 \ bin \ mongod.exe" auf.

Manohar Reddy Poreddy
quelle
Dies scheint es nicht zu minimieren:call Start /MIN "c" "calc.exe"
Mondra
1
Richtig, es funktioniert für Notepad: Rufen Sie start / min "n" "notepad.exe"
Manohar Reddy Poreddy
So funktioniert es für Windows-Anwendungen, aber nicht für Konsolenanwendungen. Die Zahlen, wie man das passieren kann , SW_*um CreateProcessWüber STARTUPINFO::wShowWindow(einschließlich SW_HIDE).
0xC0000022L
Was ist ein vollständiger Befehl mit "Start" oder einem anderen Tool? Müssen wir ein anderes Programm schreiben?
Manohar Reddy Poreddy
-2

bin gerade auf diesen Thread gestoßen, in dem Windows 7 mit Power Shell ausführbare Dateien im Hintergrund ausführt, genau wie Unix-Dateiname &

Beispiel: Start -NoNewWindow Dateiname

hilf mit anzufangen

NAME Start-Prozess

SYNTAX-Startprozess [-FilePath] [[-ArgumentList]] [-Credential] [-WorkingDirectory] [-LoadUserProfile] [-NoNewWindow] [-PassThru] [-RedirectStandardError] [-RedirectStandardInput] [-RedirectStandardInput] [-WindowStyle {Normal | Versteckte | Minimiert | Maximiert}] [-UseNewEnvironment] []

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

Aliase saps beginnen

Jerry
quelle