O script em lote do Windows inicia o programa e sai do console


93

Tenho um script em lote que uso para iniciar um programa, como notepad.exe. Quando clico duas vezes neste arquivo em lote, o bloco de notas inicia normalmente, mas a janela preta de cmdquem o iniciou notepad.exepermanece em segundo plano. O que devo fazer para iniciar notepad.exee fazer a janela cmd desaparecer?

editar : é mais complicado do que usar \I.

As cmdchamadas cygwine cygwincomeça notepad. eu uso

start \I \path\cygwin\bin\bash.exe

e a primeira janela (cmd) desaparece, mas uma segunda janela (\ cygwin \ bin \ bash.exe) ainda está em segundo plano. No script cygwin eu usei notepad.exe &e depois saí .

Respostas:


209
start "" "%SystemRoot%\Notepad.exe"

Mantenha o ""intervalo entre o início e o caminho do aplicativo.


Explicação adicionada:

Normalmente, quando lançamos um programa a partir de um arquivo em lote como abaixo, teremos as janelas pretas no fundo como o OP disse.

%SystemRoot%\Notepad.exe

Isso era causado pelo Bloco de notas em execução no mesmo prompt de comando (processo). O prompt de comando será fechado APÓS o bloco de notas ser fechado. Para evitar isso, podemos usar o startcomando para iniciar um processo separado como este.

start %SystemRoot%\Notepad.exe

Este comando é adequado, desde que não tenha espaço no caminho. Para lidar com o espaço no caminho por precaução, adicionamos as "aspas como esta.

start "%SystemRoot%\Notepad.exe"

No entanto, a execução desse comando apenas iniciaria outro prompt de comando em branco. Por quê? Se você consultar o start /?, o startcomando reconhecerá o argumento entre o "como o título do novo prompt de comando que será iniciado. Então, para resolver isso, temos o comando assim:

start "" "%SystemRoot%\Notepad.exe"

O primeiro argumento de ""é definir o título (que definimos como em branco), e o segundo argumento de "%SystemRoot%\Notepad.exe"é o comando de destino a ser executado (que suporta espaços no caminho).

Se precisar adicionar parâmetros ao comando, basta adicioná-los entre aspas, ou seja:

start "" "%SystemRoot%\Notepad.exe" "<filename>" 

12
nota: quando você deseja iniciar um arquivo jar java desta forma, certifique-se de usar o javawexecutável (não apenas java, porque javairá iniciar outra janela em lote): por exemplostart "" "javaw" -jar C:\JavaProject\myApp.jar
TmTron

@checksum Por favor, você também poderia estender seu exemplo sobre como redirecionar o erro padrão e a saída padrão do aplicativo que é iniciado?
Starfish

@Starfish Acho que o notepad não tem stdout e stderr. Mas para sua pergunta, seria algo parecido application.exe > stdout.txt 2>stderr.txt. Adicionar sua pergunta à resposta acima desviaria da pergunta do autor da postagem original. Pode ser que você possa começar uma nova pergunta para fazer mais detalhes.
checksum de

1
Solução totalmente sem sentido. O Windows vence novamente.
Ярослав Рахматуллин

9

Use start notepad.exe.

Mais informações com start /?.


1
E exatamente qual argumento? /B? Eu li, mas se eu usar start /B notepad.exea janela cmd não desaparece.
Possa

Ok, é mais complicado do que usar \I. O cmd chama o cygwin e o bloco de notas de início do cygwin. Eu uso start \I cygwine a primeira janela desaparece, mas uma segunda janela ainda está no fundo. No script cygwin eu usei notepad.exe &e entãoexit
Possa

cygstart inicia o bloco de notas, mas o console permanece em segundo plano.
Possa

5

A maneira mais simples é apenas começar com start

start notepad.exe

Aqui você pode encontrar mais informações sobrestart


4

%ComSpec% /c %systemroot%\notepad.exe


isso não fecha a janela cmd%ComSpec% /c emacs.exe "-rv" "--no-splash"
jcubic

0

Hmm ... eu faço isso em um dos meus arquivos em lote assim, sem usar CALL ou START:

%SystemRoot%\notepad.exe ..\%URI%
GOTO ENDF

Não tenho o Cygwin instalado e estou no Windows XP.


Erro "The system cannot find the batch label specified - ENDF"no Windows 10
jcubic

0
start "" ExeToExecute

método não funciona para mim no caso do Xilinx xsdk, porque como apontado por @jeb nos comentários abaixo, é na verdade um arquivo bat.

então o que não funciona de fato é

start "" BatToExecute

Estou tentando abrir o xsdk assim e ele abre um cmd separado que precisa ser fechado e o xsdk pode ser executado por conta própria

Antes de lançar o xsdk eu corro (fonte) o Env / Paths (com settings64.bat ) para que o comando xsdk.bat seja reconhecido (simplesmente como xsdk, sem o .bat )

o que funciona com .bat

call BatToExecute

2
Isso provavelmente responde a uma pergunta, mas não esta. A questão é sobre como iniciar um arquivo .exe ( notepad.exe) com desacoplamento do cmd.exe. Você responde como iniciar um arquivo .bat na mesma instância
jeb

-4

Tente começar path\to\cygwin\bin\bash.exe


1
Isso realmente não responde à pergunta dos OPs. Ele não estava perguntando como começar cygwin.
Jeremy J Starcher
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.