¿Cómo puedo ejecutar una línea de comandos de Windows en segundo plano?

160

¿Cómo puedo ejecutar una línea de comandos de Windows en segundo plano, sin que interactúe con el usuario activo?

Mohammad AL-Rawabdeh
fuente
1
¿Puedes especificar lo que quieres hacer? ¿Desea ejecutar un comando en la línea de comando en segundo plano o desea ejecutar toda la línea de comando en segundo plano, por lo que no es visible desde el escritorio?
omnibrain
Necesito dos bastones para ejecutar un comando en la línea de comando en segundo plano o desea ejecutar toda la línea de comando en segundo plano
Mohammad AL-Rawabdeh
Duplica esta pregunta en ServerFault .
Dan Dascalescu

Respuestas:

37

Su pregunta es bastante vaga, pero hay una publicación en ServerFault que puede contener la información que necesita. La respuesta allí describe cómo ejecutar una ventana de archivo por lotes oculta:

En su lugar, puede ejecutarlo en silencio usando un archivo de Windows Script. El Método de ejecución le permite ejecutar un script en modo invisible. Crea un .vbs archivo como este

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

y programarlo El segundo argumento en este ejemplo establece el estilo de la ventana. 0 significa "ocultar la ventana".

nhinkle
fuente
Esto es perfecto. SetPoint para Logitech nunca, NUNCA, comienza con Windows. Lo he estado iniciando manualmente durante unos 3 años. ¿Importa dónde está el lote? He visto a algunas personas poner este tipo de archivo por lotes en C, o en la raíz.
ejbytes
245

Esto es un poco tarde pero me encontré con esta pregunta mientras buscaba la respuesta y encontré esto:

START /B program

que, en Windows, es el más cercano al comando de Linux:

program &

Desde el sistema de ayuda de la consola:

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 que vi con él es que tienes más de un programa escribiendo en la ventana de la consola, se vuelve un poco confuso y confuso.

Para que no interactúe con el usuario, puede redirigir la salida a un archivo:

START /B program > somefile.txt
Novicaína
fuente
3
Me gusta más esta respuesta porque no abre otra ventana de comando
wisbucky
3
Esto no parece funcionar para mí, parece que solo crea una nueva instancia de cmd [?] Sin embargo, si lo ejecuto así start /B "" program, funcionó ...
rogerdpack
1
@rogerdpack Eso es correcto. Por alguna razón con Windows 7, este es el formato de comando. El "" es el parámetro de título obligatorio.
ejbytes
10
Desafortunadamente, si salgo de la ventana de shell en la que generé el proceso, parece que el proceso también termina.
palswim
2
@Qwerty: Mira el MSDN para SetConsoleCtrlHandler
Zan Lynx el
68

Sospecho que quiere decir: ejecute algo en segundo plano y recupere la línea de comando inmediatamente con el programa iniciado continuando.

START "" program

¿Cuál es el equivalente de Unix de

program &
Paul Douglas
fuente
77
¿Cuál es el equivalente fg? ¿Podemos cerrar el símbolo del sistema y el programa seguirá ejecutándose?
Nenotlep
1
Además, quiero ejecutar un programa en el símbolo del sistema y volver a él de vez en cuando, como en la pantalla, ¿es factible con esto? Necesito poder cerrar el símbolo del sistema pero mantener el programa en ejecución utilizable.
Nenotlep
44
¿De qué es ese parámetro vacío start? No funciona sin él (ejecuta solo una nueva instancia de comando), pero startla ayuda no dice nada al respecto, afirma que todos los parámetros son opcionales (o no lo entiendo).
Dawid Ferenczy Rogožan
@DawidFerenczy startfunciona sin el parámetro vacío para mí, pero parece que obtengo un shells con una configuración separada cuando uso el parámetro vacío, como una configuración que hice cuando no tenía el parámetro vacío no se usa cuando uso El parámetro vacío. Me pregunto por qué usan configuraciones separadas.
HelloGoodbye
@Paul START "" programinicia un comando en una nueva terminal para mí, mientras que program &en Unix ejecuta el comando e imprime la salida en la misma terminal.
HelloGoodbye
15
START /MIN program 

el anterior está bastante más cerca con su contraparte de Unix program &

Siva Sankaran
fuente
6

Puede usar este script de PowerShell (¡comentado!):

# 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

Guárdelo como un .ps1archivo. Después de habilitar la ejecución del script (consulte Habilitación de scripts en el wiki de la etiqueta de PowerShell ), puede pasarle una o dos cadenas: el nombre del ejecutable y, opcionalmente, la línea de argumentos. Por ejemplo:

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

Confirmo que esto funciona en Windows 10.

Ben N
fuente
44
sí inicio / b ya no funciona.
Sajuuk
3

Así es como mi servidor interno PHP entra en segundo plano. Entonces, técnicamente debería funcionar para todos.

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

Gracias

Suyash Jain
fuente
1

Si desea que el programa de línea de comandos se ejecute sin que el usuario lo sepa, defínalo como un Servicio de Windows y se ejecutará según un cronograma.

CarlF
fuente
44
¿Cómo haces eso?
barlop
Alternativamente, puede convertirlo en una tarea programada: Panel de control-> Herramientas administrativas-> Tareas programadas o usar el schtaskscomando en Windows XP y superior (advertencia: schtaskses complicado).
LawrenceC
0

Una respuesta relacionada, con 2 ejemplos:

  1. A continuación se abre calc.exe:

llame a START / B "my calc" "calc.exe"

  1. A veces, el primer plano no es deseable, luego se ejecuta minimizado de la siguiente manera:

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

Manohar Reddy Poreddy
fuente
Esto no parece funcionar minimizado:call Start /MIN "c" "calc.exe"
moondra
1
correcto, funciona para el bloc de notas: llame al inicio / min "n" "notepad.exe"
Manohar Reddy Poreddy
Por lo tanto, funciona para aplicaciones con ventana pero no para aplicaciones de consola. Figuras, ya que se puede pasar SW_*a la CreateProcessWvía STARTUPINFO::wShowWindow(incluido SW_HIDE).
0xC0000022L
¿Qué es un comando completo, con el anterior como "inicio" u otra herramienta? ¿Necesitamos escribir otro programa?
Manohar Reddy Poreddy
-2

acabo de encontrar este hilo windows 7, usando power shell, ejecuta ejecutables en segundo plano, exactamente igual que unix filename &

ejemplo: inicio -NoNewWindow nombrearchivo

ayuda para comenzar

NOMBRE Proceso de inicio

Proceso de inicio SYNTAX [-FilePath] [[-ArgumentList]] [-Credential] [-WorkingDirectory] [-LoadUserProfile] [-NoNewWindow] [-PassThru] [-RedirectStandardError] [-RedirectStandardInput] [-Redirect] [-WindowStyle {Normal | Oculto | Minimizado | Maximizado}] [-UseNewEnvironment] []

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

Alias ​​saps comienzan

alemán
fuente