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


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


128


origen


¿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 se puede ver desde el escritorio? - omnibrain
Necesito dos bastón realizar un comando en la línea de comandos en el fondo o desea realizar toda la línea de comandos en el fondo - Mohammad AL-Rawabdeh
Duplicados esta pregunta en ServerFault. - Dan Dascalescu


Respuestas:


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

Podría ejecutarlo en silencio usando un archivo de Windows Script en su lugar. La carrera   El método le permite ejecutar un script en modo invisible. Crear 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 la ventana   estilo. 0 significa "ocultar la ventana".


25



Esto es perfecto. SetPoint para Logitech nunca, NUNCA, comienza con Windows. Lo he estado comenzando manualmente por alrededor de 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


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 lo más cercano al comando de Linux:

program &

Desde el sistema de consola HELP:

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

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

START /B program > somefile.txt

187



Me gusta esta respuesta mejor porque no abre otra ventana de comando - wisbucky
Esto no parece funcionar para mí, parece que solo crea una nueva instancia de cmd [?] Sin embargo, si lo ejecuto como start /B "" program entonces funcionó ... - rogerdpack
@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
Lamentablemente, si salgo de la ventana del shell en la que generé el proceso, parece que el proceso también finaliza. - palswim
@Qwerty: mira el MSDN para SetConsoleCtrlHandler - Zan Lynx


Sospecho que te refieres a: ejecuta algo en segundo plano y recupera la línea de comando inmediatamente con el programa iniciado.

START "" program

¿Cuál es el equivalente de Unix de

program &

59



¿Cuál es el equivalente fg? ¿Podemos cerrar el símbolo del sistema y aún se ejecutará el porgrama? - Nenotlep
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
¿Cuál es ese parámetro vacío de start? No funciona sin él (ejecuta solo una nueva instancia de comando), pero startLa ayuda de este no dice nada al respecto, afirma que todos los parámetros son opcionales (o no lo entiendo). - Dawid Ferenczy
@DawidFerenczy start funciona sin el parámetro vacío para mí, pero parece que tengo 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 vacío parámetro. Me pregunto por qué usan configuraciones separadas? - HelloGoodbye
@Pablo START "" program inicia un comando en una nueva terminal para mí, mientras program & en Unix ejecuta el comando e imprime la salida en el mismo terminal. - HelloGoodbye


START /MIN program 

el anterior es bastante más cercano con su contraparte de Unix program &


10





Puede utilizar esta secuencia de comandos (comentada) de 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

Guárdalo como un .ps1 archivo. Después de habilitar la ejecución del script (consulte Habilitar scripts en la etiqueta Wiki 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.


5



sip start / b ya no funciona. - Sajuuk


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


1



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


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


1





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, entonces se ejecuta minimizado de la siguiente manera:

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


0



Esto no parece ejecutarlo minimizado: call Start /MIN "c" "calc.exe" - moondra
correcto, funciona para notepad: call start / min "n" "notepad.exe" - Manohar Reddy Poreddy
Por lo tanto, funciona para aplicaciones con ventana pero no para aplicaciones de consola. Figuras, como uno puede pasar el SW_* a CreateProcessW vía STARTUPINFO::wShowWindow (incluso SW_HIDE) - 0xC0000022L
¿Qué es un comando completo, con arriba como "inicio" u otra herramienta? ¿Necesitamos escribir otro programa? - Manohar Reddy Poreddy


Un ejemplo :

start / MIN / B grep -noid include * .c 1> log.txt 2> 1 &

Inicia grep en backgound redirecciona stdout && stderr a log.txt


-2



Esta respuesta ya se ha dado varias veces y se explicó con gran detalle. ¿Su respuesta contribuye con algo que aún no se ha dicho? - Michael K