Come posso eseguire una riga di comando di Windows in background?


160

Come posso eseguire una riga di comando di Windows in background, senza che interagisca con l'utente attivo?


1
Puoi specificare cosa vuoi fare? Vuoi eseguire un comando sulla riga di comando in background o vuoi eseguire l'intera riga di comando in background, quindi non è visibile dal desktop?
onnibra il

ho bisogno di due bastoncini per eseguire un comando sulla riga di comando in background o vuoi eseguire l'intera riga di comando in background
Mohammad AL-Rawabdeh

Risposte:


37

La tua domanda è piuttosto vaga, ma c'è un post su ServerFault che può contenere le informazioni di cui hai bisogno. La risposta qui descrive come eseguire una finestra di file batch nascosta:

È possibile eseguirlo in silenzio utilizzando invece un file di script di Windows. Il metodo Run consente di eseguire uno script in modalità invisibile. Crea un .vbs file come questo

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

e programmarlo. Il secondo argomento in questo esempio imposta lo stile della finestra. 0 significa "nascondi la finestra".


Questo è perfetto. SetPoint per Logitech non inizia MAI, mai con Windows. L'ho avviato manualmente da circa 3 anni. Importa dove si trova il batch? Ho visto alcune persone mettere questo tipo di file batch in C o root.
ejbyte

244

È un po 'tardi, ma ho appena incontrato questa domanda mentre cercavo la risposta e ho trovato questo:

START /B program

che, su Windows, è il più vicino al comando Linux:

program &

Dal sistema HELP della console:

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.

Un problema che ho riscontrato è che hai più di un programma che scrive sulla finestra della console, diventa un po 'confuso e confuso.

Per evitare che interagisca con l'utente, è possibile reindirizzare l'output su un file:

START /B program > somefile.txt

3
Mi piace molto questa risposta perché non apre un'altra finestra di comando
wisbucky

3
Questo non sembra funzionare per me, sembra solo creare una nuova istanza cmd [?] Tuttavia se lo start /B "" program
eseguo

1
@rogerdpack Esatto. Per qualche motivo con Windows 7, questo è il formato del comando. "" È il parametro del titolo obbligatorio.
ejbyte il

10
Sfortunatamente, se esco dalla finestra della shell in cui ho generato il processo, sembra che anche il processo termina.
palswim,

2
@Qwerty: guarda MSDN per SetConsoleCtrlHandler
Zan Lynx,

68

Sospetto che intendi: eseguire qualcosa in background e ripristinare immediatamente la riga di comando con il programma avviato in corso.

START "" program

Qual è l'equivalente di Unix di

program &

7
qual è l'equivalente in fg? Possiamo chiudere il prompt dei comandi e il porgram continuerà a funzionare?
Nenotlep,

1
Inoltre, voglio eseguire un programma nel prompt dei comandi e tornare ad esso di tanto in tanto, come nella schermata: è possibile farlo? Devo poter chiudere il prompt dei comandi ma mantenere utilizzabile il programma in esecuzione.
Nenotlep,

4
Cos'è quel parametro vuoto di start? Non funziona senza di essa (esegue solo una nuova istanza di comando), ma l start'aiuto non dice nulla al riguardo, afferma che tutti i parametri sono opzionali (o non lo capisco).
Dawid Ferenczy Rogožan,

@DawidFerenczy startfunziona senza il parametro vuoto per me, ma mi sembra di avere una shell con una configurazione separata quando uso il parametro vuoto, come impostazione che ho fatto quando non avevo il parametro vuoto non è usato quando uso il parametro vuoto. Mi chiedo perché usano configurazioni separate?
Ciao Arrivederci

@Paul START "" programavvia un comando in un nuovo terminale per me, mentre program &in Unix esegue il comando e stampa l'output sullo stesso terminale.
Ciao Arrivederci

15
START /MIN program 

quello sopra è molto più vicino con la sua controparte Unix program &


6

Puoi usare questo (commentato!) Script 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

Salvalo come .ps1file. Dopo aver abilitato l'esecuzione dello script (vedere Abilitazione degli script nel tag wiki PowerShell ), è possibile passarlo una o due stringhe: il nome dell'eseguibile e facoltativamente la riga degli argomenti. Per esempio:

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

Confermo che funziona su Windows 10.


4
yep start / b non funziona più.
Sajuuk,

3

Ecco come il mio server interno PHP va in background. Quindi tecnicamente dovrebbe funzionare per tutti.

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

Grazie


1

Se si desidera che il programma della riga di comando venga eseguito senza che l'utente ne sia a conoscenza, definirlo come un servizio Windows e verrà eseguito secondo una pianificazione.


4
Come si fa a farlo?
barlop

In alternativa puoi renderlo un'attività pianificata - Pannello di controllo-> Strumenti di amministrazione-> Attività pianificate o utilizzare il schtaskscomando in Windows XP e versioni successive (avviso: schtasksè complicato).
LawrenceC,

0

Una risposta correlata, con 2 esempi:

  1. Di seguito si apre calc.exe:

chiama START / B "my calc" "calc.exe"

  1. A volte il primo piano non è desiderabile, quindi si esegue minimizzato come di seguito:

chiama START / MIN "my mongod" "% ProgramFiles% \ MongoDB \ Server \ 3.4 \ bin \ mongod.exe"


Questo non sembra minimizzarlo:call Start /MIN "c" "calc.exe"
moondra,

1
corretto, funziona con il blocco note: chiama start / min "n" "notepad.exe"
Manohar Reddy Poreddy

Quindi funziona per le applicazioni con finestre ma non per le applicazioni console. Figure, come si può passare SW_*alla CreateProcessWvia STARTUPINFO::wShowWindow(incluso SW_HIDE).
0xC0000022L

Che cos'è un comando completo, con sopra come "start" o altri strumenti? dobbiamo scrivere un altro programma?
Manohar Reddy Poreddy il


-2

ho appena trovato questo thread di Windows 7, usando Power Shell, esegue eseguibili in background, esattamente come il nome file unix &

esempio: start -NoNewWindow nomefile

aiuto per iniziare

NAME Avvia processo

SYNTAX Start-Process [-FilePath] [[-ArgumentList]] [-Credential] [-WorkingDirectory] [-LoadUserProfile] [-NoNewWindow] [-PassThru] [-RedirectStandardError] [-RedirectStandardInput] [Outir [-WindowStyle {Normale | Nascosto | Ridotto a icona | Maximized}] [-UseNewEnvironment] []

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

Inizia la linfa degli ALIASI

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.