2011-01-14 18:23:22 +0000 2011-01-14 18:23:22 +0000
59
59

Como posso criar um ficheiro Windows Batch que não mostra o Prompt de Comando quando executado?

Instalei uma jóia rubi chamada Redcar, que é lançada a partir da linha de comando. Quando é executado, rouba a shell até terminar, por isso tenho de criar uma nova janela de shell para continuar a fazer o trabalho de linha de comandos. A shell que estou a usar é a shell GITBash do MySysGit.

Encontrei um ficheiro Redcar.bat que é para lançar Redcar como atalho, presumo, mas não quero que a janela de comandos extra se abra sempre que lançar o ficheiro BAT.

Como é que eu simplesmente corro o BAT sem ver a prompt?

Respostas (11)

38
38
38
2011-01-21 18:41:45 +0000

Não pode - executar um ficheiro de lote com o Prompt de Comando embutido vai manter uma janela aberta até o ficheiro de lote sair.

O que você can faz é tomar medidas para garantir que o ficheiro de lote saia o mais rápido possível. Se possível, modifique o ficheiro de lote para executar qualquer programa com o comando start. Por defeito, o start regressa imediatamente sem esperar que o programa saia, pelo que o ficheiro de lote continuará a correr e, presumivelmente, a sair imediatamente. Junte isso com a modificação do seu atalho para executar o ficheiro batch minimizado, e só verá a barra de tarefas piscar sem sequer ver uma janela no ecrã.

Uma ressalva a isto é que se estiver a executar um programa em modo consola, que muitos intérpretes de script são, o ficheiro batch irá esperar que o programa saia, e usando o start irá gerar uma nova janela de consola. O que você precisa fazer neste caso é executar a versão baseada no Windows do interpretador em vez da versão baseada na console – não são necessários start. Para Perl, você executaria o wperl.exe em vez do perl.exe. Para Python, é o pythonw.exe em vez do python.exe. A antiga distribuição win32 Ruby que descarreguei tem o rubyw.exe, que deve fazer a mesma coisa.

Uma possibilidade final é usar uma ferramenta de terceiros para correr o prompt de comando com uma janela oculta. Já ouvi falar de tais coisas mas nunca tive uso para elas, por isso não sei de nada em particular para vos apontar.

22
22
22
2014-01-15 06:25:25 +0000

Penso que esta é a solução mais fácil e curta para correr um ficheiro batch sem abrir a janela do DOS, pode ser muito perturbador quando se quer agendar um conjunto de comandos para correr periodicamente, por isso a janela do DOS continua a aparecer, aqui está a sua solução. Use um script VB para chamar o ficheiro batch …

Set WshShell = CreateObject("WScript.Shell" ) 
WshShell.Run chr(34) & "C:\Batch Files\ mycommands.bat" & Chr(34), 0 
Set WshShell = Nothing

Copie as linhas acima para um editor e guarde o ficheiro com a extensão .VBS. Edite o nome e o caminho do ficheiro .BAT em conformidade. Depois é só correr o ficheiro .vbs e a magia acontece!

8
8
8
2013-01-02 05:37:05 +0000

Pode correr outro ficheiro batch com START /MIN CMD.EXE /C mybatchfile.bat a partir do prompt de comando.

Do exterior, irá trazer a janela da consola cmd mas, para evitar isso, pode criar um ficheiro de atalho com properties modificado para start minimized*.

5
5
5
2016-09-11 08:06:00 +0000

Para tal, utilize o programa Bat To Exe Converter para converter o seu ficheiro batch para um ficheiro executável.

Ao converter para um executável, encontrará uma opção para executar o seu ficheiro como uma Aplicação invisível na secção visibilidade. Assim, quando o correr, ele irá correr sem janela.

4
4
4
2012-12-18 07:07:00 +0000

Continuando com a resposta de Dennis Williamson, pode editar o ficheiro batch e anexar (prepend) START /B ao comando que está a executar.

Por exemplo, tenho um ficheiro batch que corre putty e tinha o mesmo problema (CMD extra), por isso foi assim que o escrevi:

@ECHO OFF START /B putty.exe -load _name\_of\_my\_config\_file_

Funcionou perfeitamente.

4
4
4
2011-01-14 19:32:24 +0000

Experimente:

START /B batchfile

** nota adicionada por barlop**

start /? diz de /B

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.
3
3
3
2015-04-25 09:00:42 +0000

Pode utilizar RunHiddenConsole

hideExec.bat

@echo off
RunHiddenConsole batch.bat
3
3
3
2011-01-21 18:20:43 +0000

Não estou claro quanto ao seu problema, mas com alguns dos meus ficheiros de lotes, uso um “dumy” que tem como único objectivo lançar o ficheiro do lote principal.

Então o GO.BAT terá:

cmd /c go2.bat %1 %2 %3
exit

A saída fecha a janela de comandos que de outra forma permaneceria aberta.

E o GO2.BAT terá o conteúdo real do ficheiro do lote que eu desejo.

@echo off
  set userid=

  if NOT [%1]==[] goto userid:
  set /p userid=Enter USERID:  
  goto set_usr:

 :userid
 set userid=%1
 shift

 :set_usr
 if %userid%==steven goto steven:
 ...
0
0
0
2013-03-04 00:36:09 +0000

Basta colocar o interruptor /b na frente do caminho. Não abre o segundo prompt de comando.

0
0
0
2014-10-18 16:43:48 +0000

A resposta da Indago tem sido a melhor solução para mim até agora. O ficheiro VBS permite-me correr a funcionalidade do lote através do script, impedindo que a janela CMD aconteça em primeiro lugar. Existem algumas limitações:

  1. Se o seu lote requer direitos de administrador, crie ou utilize um lote existente que chame o VBS e execute esse lote como Administrador.

  2. Sem visibilidade, pode ser difícil discernir se o que está a tentar fazer é correr da forma que pretende.

Com isto dito, eu colocaria um pequeno teste de configuração/unidade em primeiro lugar para ter a certeza que está a funcionar exactamente da forma que pretende, antes de o integrar.

0
0
0
2016-05-20 07:11:31 +0000

Já usei cmdow no passado, e parece ter funcionado para o que eu quero.

Provavelmente vai querer usar uma das seguintes opções:CMDOW [window] /HID

/HID esconde a janela especificada

CMDOW [window] /END

/END fecha a janela especificada

CMDOW [window] /CLS pediu educadamente à janela para fechar (algumas janelas podem abrir uma caixa de diálogo)

Espero que isto ajude.