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í .

Possa
fonte

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>" 
soma de verificação
fonte
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 /?.

Benoit
fonte
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

irmãos 28
fonte
4

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

MrBogus
fonte
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.

Djangofan
fonte
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
Tomasz Janicki
fonte
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

yyyx
fonte
1
Isso realmente não responde à pergunta dos OPs. Ele não estava perguntando como começar cygwin.
Jeremy J Starcher