Como eu crio um arquivo de lote do Windows que não mostra o prompt de comando quando executado? [duplicado]

53

Eu instalei uma jóia rubi chamada Redcar, que é lançada a partir da linha de comando. Quando ele é executado, ele rouba o shell até que ele termine, portanto, preciso criar uma nova janela do shell para continuar fazendo o trabalho de linha de comando. O shell que estou usando é o shell GITBash do MySysGit.

Eu encontrei um arquivo Redcar.bat que serve para lançar o Redcar como um atalho, eu presumo, mas eu não quero que a janela de prompt de comando extra abra sempre que eu iniciar o arquivo BAT.

Como faço para executar o BAT sem ver o prompt?

    
por Jake 14.01.2011 / 19:23

13 respostas

35

Você não pode - a execução de um arquivo de lote com o Prompt de Comando embutido manterá uma janela aberta até que o arquivo de lote seja encerrado.

O que você pode fazer é tomar medidas para garantir que o arquivo de lote saia o mais rápido possível. Se for possível, modifique o arquivo em lote para executar qualquer programa com o comando start . Por padrão, start retorna imediatamente sem aguardar a saída do programa, portanto, o arquivo em lote continuará a ser executado e, presumivelmente, sairá imediatamente. Junte isso ao modificar seu atalho para executar o arquivo de lote minimizado, e você só verá o flash da barra de tarefas sem sequer ver uma janela na tela.

Uma ressalva é que, se você estiver executando um programa em modo de console, que muitos intérpretes de script, o arquivo em lotes aguardará a saída do programa e o uso de start gerará uma nova janela do console. O que você precisa fazer nesse caso é executar a versão do interpretador baseada no Windows em vez da baseada no console - não é necessário start . Para Perl, você executaria wperl.exe em vez de perl.exe . Para Python, é pythonw.exe em vez de python.exe . A antiga distribuição win32 Ruby que eu baixei tem rubyw.exe , que deve fazer a mesma coisa.

Uma possibilidade final é usar uma ferramenta de terceiros para executar o prompt de comando com uma janela oculta. Eu já ouvi falar dessas coisas, mas nunca tive um uso para elas, então eu não sei de nada em particular para te apontar.

    
por 21.01.2011 / 19:41
20

Eu acho que esta é a solução mais fácil e mais curta para executar um arquivo de lote sem abrir a janela do DOS, pode ser muito perturbador quando você quer agendar um conjunto de comandos para executar periodicamente, então a janela DOS continua aparecendo, aqui é a sua solução. Use um script VB para chamar o arquivo de lote ...

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 salve o arquivo com a extensão .VBS. Edite o nome do arquivo .BAT e o caminho de acordo. Em seguida, basta executar o arquivo .vbs e a mágica acontece!

    
por 15.01.2014 / 07:25
8

Você pode executar outro arquivo de lote com START / MIN CMD.EXE / C mybatchfile.bat no prompt de comando.

Do lado de fora, a janela do console cmd será exibida, mas para evitar isso, você pode criar um arquivo de atalho com propriedades modificadas para iniciar minimizado .

    
por 02.01.2013 / 06:37
4

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.
    
por 14.01.2011 / 20:32
4

Para fazer isso, use o programa Bat To Exe Converter para converter seu arquivo de lote em um arquivo executável.

Ao converter em um executável, você encontrará uma opção para executar seu arquivo como um aplicativo invisível na seção de visibilidade. Assim, quando você executá-lo, ele será executado sem uma janela.

    
por 11.09.2016 / 10:06
3

Não estou certo quanto ao seu problema, mas com alguns dos meus arquivos em lote, eu uso um "dumy" cujo único propósito é lançar o arquivo de lote principal.

Então o GO.BAT terá:

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

A saída fecha a janela do prompt de comando que, de outra forma, permaneceria aberta.

E o GO2.BAT terá o conteúdo do arquivo em 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:
 ...
    
por 21.01.2011 / 19:20
3

Continuando com a resposta de Dennis Williamson, você pode editar o arquivo de lote e acrescentar (preceder) START /B ao comando que está sendo executado.

Por exemplo, eu tenho um arquivo de lote que executa putty e tinha o mesmo problema (CMD extra), então é assim que eu escrevi:

@ECHO OFF
START /B putty.exe -load name_of_my_config_file

Funcionou perfeitamente.

    
por 18.12.2012 / 08:07
3

Você pode usar RunHiddenConsole

hideExec.bat

@echo off
RunHiddenConsole batch.bat
    
por 25.04.2015 / 11:00
1

Se ainda estiver interessado em não mostrar a janela da consola, aqui é uma solução do stackoverflow que funcionou para mim (no meu caso eu não coloquei nada no registro, mas onde eu precisei).

    
por 29.04.2012 / 15:45
0

Basta colocar a chave / b na frente do caminho. Não abrirá o segundo prompt de comando.

    
por 04.03.2013 / 01:36
0

A resposta da Indago foi a melhor solução para mim até agora. O arquivo VBS me permite executar a funcionalidade do lote por meio do script, evitando que a janela do CMD aconteça em primeiro lugar. Há algumas ressalvas:

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

  2. Sem visibilidade, pode ser difícil discernir se o que você está tentando fazer é realmente executar da maneira que você quer.

Com isso dito, eu colocaria um pequeno teste de instalação / unidade primeiro para ter certeza de que ele está funcionando exatamente da maneira que você quer, antes de integrá-lo.

    
por 18.10.2014 / 18:43
0

Eu usei cmdow no passado, e parece que funcionou para o que eu quero.

Você provavelmente desejará usar uma das seguintes opções: CMDOW [window] /HID

/HID oculta a janela especificada

CMDOW [window] /END

/END fecha a janela especificada

CMDOW [window] /CLS

/CLS educadamente pediu para fechar a janela (algumas janelas podem abrir uma caixa de diálogo)

Espero que isso ajude.

    
por 20.05.2016 / 09:11
-5

Basta criar um atalho para o arquivo de lote, clicar com o botão direito, clicar em Properties , ir para a guia General , marcar a caixa chamada Hidden , clicar em Apply e depois em OK .
Agora, ao abrir o atalho, ele executará o arquivo de lote Oculto.

    
por 17.05.2015 / 18:28