Como posso executar uma linha de comando do Windows em segundo plano?

160

Como posso executar uma linha de comando do Windows em segundo plano, sem interagir com o usuário ativo?

Mohammad AL-Rawabdeh
fonte
1
Você pode especificar o que deseja fazer? Deseja executar um comando na linha de comando em segundo plano ou deseja executar toda a linha de comando em segundo plano, para que não seja visível na área de trabalho?
Omnibrain 12/10/10
Eu preciso de dois cana executar um comando na linha de comando no fundo ou você deseja executar toda a linha de comando no fundo
Mohammad AL-Rawabdeh
Duplica esta pergunta no ServerFault .
Dan Dascalescu

Respostas:

37

Sua pergunta é bastante vaga, mas há uma postagem no ServerFault que pode conter as informações necessárias. A resposta lá descreve como executar uma janela de arquivo em lotes oculta:

Você pode executá-lo silenciosamente usando um arquivo de script do Windows. O método Run permite executar um script no modo invisível. Crie um .vbs arquivo como este

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

e agende. O segundo argumento neste exemplo define o estilo da janela. 0 significa "ocultar a janela".

nhinkle
fonte
Isto é perfeito. O SetPoint for Logitech nunca NUNCA começa com o Windows. Estou iniciando manualmente há cerca de 3 anos. Importa onde está o lote? Eu já vi algumas pessoas colocarem esse tipo de arquivo em lote em C ou na raiz.
ejbytes 31/01
244

É um pouco tarde, mas acabei de me deparar com essa pergunta enquanto procurava a resposta pessoalmente e encontrei o seguinte:

START /B program

qual, no Windows, é o mais próximo do comando Linux:

program &

No sistema HELP do 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.

Um problema que vi com ele é que você tem mais de um programa gravando na janela do console, fica um pouco confuso e confuso.

Para que ele não interaja com o usuário, você pode redirecionar a saída para um arquivo:

START /B program > somefile.txt
Novicaine
fonte
3
Eu gosto desta resposta melhor, porque não abrir outra janela de comando
wisbucky
3
[?] Isso não parece trabalhar para mim, parece criar apenas uma nova instância cmd no entanto, se eu executá-lo como start /B "" programentão ele trabalhou ...
rogerdpack
1
@rogerdpack Isso mesmo. Por alguma razão com o Windows 7, este é o formato de comando. O "" é o parâmetro obrigatório do título.
ejbytes
10
Infelizmente, se eu sair da janela do shell na qual eu iniciei o processo, parece que o processo também será encerrado.
precisa saber é o seguinte
2
@ Qwerty: Veja o MSDN para SetConsoleCtrlHandler
Zan Lynx
68

Eu suspeito que você quer dizer: Execute algo em segundo plano e recupere a linha de comando imediatamente, com o programa iniciado continuando.

START "" program

Qual é o equivalente Unix de

program &
Paul Douglas
fonte
7
qual é o equivalente fg? Podemos fechar o prompt de comando e o porgram ainda será executado?
Nenotlep 15/10
1
Além disso, quero executar um programa no prompt de comando e retornar a ele de tempos em tempos, como na tela - isso é possível? Eu preciso fechar o prompt de comando, mas manter o programa em execução utilizável.
Nenotlep 15/10
4
O que é esse parâmetro vazio start? Ele não funciona sem ele (executa apenas uma nova instância de comando), mas starta ajuda da Microsoft não diz nada sobre isso, ele afirma que todos os parâmetros são opcionais (ou eu não o entendo).
Dawid Ferenczy Rogožan
O @DawidFerenczy startfunciona sem o parâmetro vazio para mim, mas parece que recebo conchas com uma configuração separada quando uso o parâmetro vazio, pois uma configuração que fiz quando não tinha o parâmetro vazio não é usada quando uso o parâmetro vazio. Gostaria de saber por que eles usam configurações separadas?
hellogoodbye
@Paul START "" programinicia um comando em um novo terminal para mim, enquanto program &no Unix executa o comando e imprime a saída no mesmo terminal.
hellogoodbye
15
START /MIN program 

o acima está bem mais próximo com o seu homólogo do Unix program &

Siva Sankaran
fonte
6

Você pode usar este script (comentado!) Do 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

Salve-o como um .ps1arquivo. Depois de ativar a execução do script (consulte Habilitando scripts no wiki da tag PowerShell ), você pode transmitir uma ou duas cadeias: o nome do executável e, opcionalmente, a linha de argumentos. Por exemplo:

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

Confirmo que isso funciona no Windows 10.

Ben N
fonte
4
sim start / b não funciona mais.
Sajuuk 6/05/19
3

É assim que meu servidor interno PHP entra em segundo plano. Então, tecnicamente, deve funcionar para todos.

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

obrigado

Suyash Jain
fonte
1

Se você deseja que o programa de linha de comando seja executado sem que o usuário saiba, defina-o como um Serviço do Windows e ele será executado de acordo com uma programação.

CarlF
fonte
4
como você faz isso?
barlop
Como alternativa, você pode fazer uma tarefa agendada - Painel de Controle-> Ferramentas Administrativas-> Tarefas Agendadas ou usar o schtaskscomando no Windows XP e superior (aviso: schtasksé complicado).
21712 LawrenceC
0

Uma resposta relacionada, com 2 exemplos:

  1. Abaixo abre calc.exe:

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

  1. Às vezes, o primeiro plano não é desejável, e você executa o minimizado conforme abaixo:

chame START / MIN "meu mongod" "% ProgramFiles% \ MongoDB \ Server \ 3.4 \ bin \ mongod.exe"

Manohar Reddy Poreddy
fonte
Isso não parece executá-lo minimizado:call Start /MIN "c" "calc.exe"
moondra
1
correto, funciona para o bloco de notas: chame start / min "n" "notepad.exe"
Manohar Reddy Poreddy
Portanto, ele funciona para aplicativos em janela, mas não para aplicativos de console. Figuras, como se pode passar SW_*para a CreateProcessWvia STARTUPINFO::wShowWindow(inclusive SW_HIDE).
0xC0000022L 14/08
O que é um comando completo, com acima como "start" ou outra ferramenta? precisamos escrever outro programa?
Manohar Reddy Poreddy 15/08/18
-2

acabei de encontrar esse tópico O Windows 7, usando o Power Shell, executa executáveis ​​em segundo plano, exatamente o mesmo que o nome do arquivo unix &

exemplo: start -NoNewWindow filename

ajudar a começar

NAME Processo inicial

Processo de inicialização SYNTAX [-FilePath] [[-ArgumentList]] [-Credential] [-WorkingDirectory] [-LoadUserProfile] [-NoNewWindow] [-PassThru] [-RedirectStandardError] [-RedirectStandardInput] [-RedirectStand] [-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>]

ALIASES iniciam saps

jerry
fonte