Execute um arquivo em lote de uma maneira completamente oculta

115

Estou procurando uma maneira de executar um arquivo em lotes (.bat) sem nada visível para o usuário (sem janela, sem nome da barra de tarefas, etc.).

Eu não quero usar algum programa para fazer isso, estou procurando algo mais limpo. Eu encontrei uma solução que usa o VBScript, mas eu não Também gosto muito de usar o VBS.

    
por Moayad Mardini 29.10.2009 / 13:42

23 respostas

97

Solução 1:

Salve esta linha de texto como arquivo invisible.vbs :

CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, False

Para executar qualquer programa ou arquivo em lote de forma invisível, use-o da seguinte forma:

wscript.exe "C:\Wherever\invisible.vbs" "C:\Some Other Place\MyBatchFile.bat"

Para também ser capaz de passar / retransmitir uma lista de argumentos, use apenas duas aspas duplas

CreateObject("Wscript.Shell").Run "" & WScript.Arguments(0) & "", 0, False

Exemplo: Invisible.vbs "Kill.vbs ME.exe"

Solução 2:

Use uma ferramenta de linha de comando para iniciar silenciosamente um processo: Quiet , hidecon ou hideexec .

    
por 29.10.2009 / 17:29
25

Para ocultar arquivos em lote ou arquivos de comando ou quaisquer arquivos .... Use o Windows XP embutido no utilitário IExpress.exe para criar um .EXE fora do arquivo em lote. Ao usar IExpress , verifique a opção de execução oculta e marque todas as caixas sobre não mostrar nada. Depois de criar seu arquivo .exe, coloque-o em qualquer pasta de comando de execução escolhida e você nunca o verá.

    
por 29.06.2012 / 23:06
8

use O Cmdow é um utilitário de linha de comando do Win32 para NT4 / 2000 / XP / 2003 que permite que as janelas sejam listadas, movido, redimensionado, renomeado, oculto / desvelado, desativado / habilitado, minimizado, maximizado, restaurado, ativado / desativado, fechado, morto e muito mais.

Execute um arquivo em lote escondido passando os parâmetros: -

cmdow /run /hid mybat arg1 "arg 2"

    
por 29.10.2009 / 13:48
7

Execute o script por meio de um trabalho sem torná-lo interativo:

at 11:00 script.bat

Outra solução, se você não se importar de instalar algo como o Python, pode simplesmente criar um script e executá-lo com pythonw (a versão vinculada para operações de GUI). Como você não está usando APIs gráficas, a janela não será exibida. Basta usar as chamadas para os.system() e ele imitará um script em lote, pois é o mesmo que digitar as seqüências de caracteres na linha de comando.

Exemplo:

import os

os.system("tasklist > C:\tasks.txt")
os.system("ipconfig /all > C:\netinfo.log")
    
por 29.10.2009 / 13:49
7

Se o seu arquivo de lote pode caber em uma linha e tantos caracteres, basta usar um atalho clicando com o botão direito dentro de uma pasta colocada em um diretório aleatório e pular o restante do assistente e por último clique no atalho apenas criado e clique em propriedades e sob destino, insira o que você normalmente colocaria em um arquivo bat. E Bobs seu tio!

Prós:

 No Command Window
 Ability to use an icon
 Same Functionality of bat file

Contras:

 Limited to one line, so many characters
    
por 13.01.2013 / 04:36
5

Usando o Windows7, você pode usar o painel de controle "Tarefa agendada" para agendar um arquivo de lote para ser executado em segundo plano de forma invisível com as permissões especificadas e até mesmo como a conta "SYSTEM". Veja a imagem abaixo:

Alémdisso,emboracommenosrecursos,vocêtambémpodecriarumatarefadescriptemloteinvisívelcomoessanalinhadecomando,usandoocomando"AT.exe" sem a opção '/ interactive'.

    
por 09.01.2013 / 21:57
4

Você pode executá-lo com facilidade.

start /MIN batch.cmd
    
por 29.10.2009 / 16:54
4

Eu não gosto da solução VBScript.

Faça o download e copie nircmd.exe para sua pasta %systemroot%\system32 e adicione este comando à primeira linha de seu lote:

nircmd.exe win hide ititle "cmd.exe"

ou torne o título do lote personalizado primeiro com o comando title para evitar ocultar todas as cmd janelas, assim:

title MyBatch
nircmd.exe win hide ititle "MyBatch"
    
por 12.05.2014 / 10:25
3

Parece que alguém fez uma lista das 7-8 maneiras de executar "silencioso":

http://forums.techguy.org/dos-other/644932-solved-howto-run-batch-file.html

    
por 26.01.2011 / 20:38
3

O excelente Conversor Bat To Exe converterá seu arquivo .bat ou .cmd para .exe Arquivo.

Tem uma interface simples. Você pode optar por não ter uma janela de console selecionando a opção “Invisible application”. Além disso, permite atribuir um ícone, arquivos associados ao pacote e várias outras opções.

Veja uma captura de tela da janela principal da interface:


Observequeestaimagemestádesatualizada.Mostraaversão2.4.8e,apartirdesetembrode2018,ositeofereceaversão3.0.10.0(últimaatualização2018-03-23).

Atenção:olinkdositewww.f2ko.deparacoinhive.com,queé amplamente identified como .

    
por 30.10.2016 / 14:15
2

AINDA outra maneira, a partir de C / C ++, é usar a função CreateProcess com o sinalizador CREATE_NO_WINDOW. Tem muito poder extra não mostrado aqui. Este é apenas o mínimo que você precisa para substituir system () ou a família _spawn ().

STARTUPINFO si;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);

PROCESS_INFORMATION pi;
ZeroMemory( &pi, sizeof(pi) );

// Spawn creates a cmd.exe window.  CreateProcess doesn't.
//if ( _spawnl( _P_WAIT, szFileNameBAT, szFileNameBAT, NULL ) ) {  
if ( !CreateProcess( szFileNameBAT, szFileNameBAT, NULL, NULL, false,
                     CREATE_NO_WINDOW, NULL, NULL, &si, &pi  ) ) {
  MyErrorFunc( "CreateProcess( \"%s\" ): %d", szFileNameBAT, GetLastError() );
  goto MyErrorHandling;
}

WaitForSingleObject( pi.hProcess, INFINITE );

CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
    
por 19.06.2017 / 10:27
1
cmdow /run /hid "file.extention" arg1 "arg 2"
    
por 14.06.2010 / 16:11
1

Você não precisa fazer nada especial.

Se você estiver executando os arquivos em lote de um serviço do Windows, eles deverão ficar ocultos por padrão, a menos que você ative a opção "Permitir que o serviço interaja com a área de trabalho" no serviço.

    
por 02.07.2011 / 11:04
1

Adding my answer here from another post since it was a duplicate and I don't see this solution here so now there are 17 different answers for how you can run a batch file hidden. I will delete my answer on that post at some point in the near future.

Crie seu script em lote com sua lógica em lote e comandos e crie um novo arquivo com a extensão .VBS , use a lógica abaixo (exemplo que forneci abaixo) e apenas conecte o caminho completo ao seu .CMD ou o arquivo .BAT com os comandos PING -t <IPAddress> , etc., para que ele execute o lote de maneira oculta, não mostrando a janela de comando quando for executado.

Onde a lógica no exemplo abaixo especifica C:\Folder\BatchFileName.cmd altere isso para apontar para o script em lote com seus comandos que você está executando manualmente, etc. agora.

Salve o arquivo .VBS e agende-o com Task Scheduler Problemas no agendamento de uma tarefa no windows7 para executar em um agendamento indefinido para suas necessidades.

Caso contrário, basta clicar duas vezes no arquivo .VBS para executar o comando PING infinito que você colocou no arquivo em lote para o qual é necessário.

OBSERVAÇÃO: Acredito que é de onde obtive esta lógica de script, mas ela funciona de forma confiável para o mesmo propósito que você precisa aqui, que garante que a janela de comando fique oculta quando um arquivo de lote é executado Server Fault Source

EXEMPLO EXECUTAR VBS SCRIPT EXECUTAR LINHA DE COMANDOS OCULANDO A JANELA CMD

Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Folder\BatchFileName.cmd" & Chr(34), 0
Set WinScriptHost = Nothing
    
por 30.01.2016 / 17:44
1

Aqui eu compilei todas as maneiras que eu sei para iniciar um processo oculto com lote sem ferramentas externas.Com um pronto para usar scripts (alguns deles muito ricos em opções) , e todos eles formam a linha de comando. Sempre que possível, o PID é retornado. As ferramentas usadas são IEXPRESS, SCHTASKS, WScript.Shell, Win32_Process e JScript.Net

    
por 12.10.2012 / 09:16
1

Eu fiz isso com sucesso com nircmd desta maneira:

  1. faça o download do nircmd.exe no link
  2. crie seu arquivo .bat
  3. a primeira linha do arquivo .bat deve ser esta: nircmd.exe win hide ititle "cmd.exe"
  4. selecione os dois arquivos e crie um arquivo de extração automática usando o winrar
  5. na guia "geral", marque a opção "criar arquivo de autoextração"
  6. na aba "avançar", selecione o botão "autoextração"
  7. há uma nova janela, selecione a guia "modo" e, em seguida, selecione a opção "ocultar tudo"
  8. selecione a guia "atualizar" e selecione a opção "substituir os arquivos existentes"
  9. Selecione a guia "geral" e defina uma pasta de destino para extração, se desejar, e na caixa "Excecutar após extração", escreva o caminho completo onde seu .bat será extraído. Ex: se você definir a pasta de extração como: "c: \ windows \", o caminho completo a ser extraído após a extração será: "c: \ windows \ file.bat" (no caso de seu nome de arquivo .bat: file.bat )
  10. clique em aceitar em todas as janelas

Agora você terá um arquivo .exe que depois de clicar nele e instalá-lo, seu .bat será executado totalmente oculto.

    
por 24.09.2014 / 19:58
1

Apesar de eu já ter respondido, esta é outra abordagem. O diferente é que o script em lote pode se auto-ocultar durante a execução. Você precisará de dois scripts adicionais - windowMode.bat e getCMDPid.bat (ambos contêm .net code). Aqui como então pode ser usado:

@echo off
call getCmdPid
call windowMode -pid %errorlevel% -mode hidden

echo this should be written into log despite the cmd window is hidden>log
echo ending the log>>log
exit
    
por 09.03.2017 / 19:01
1

Você também pode criar um script AutoHotkey :

#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide 
    
por 16.04.2017 / 16:03
0

Eu tive o mesmo problema, mas descobri: Shell("filehere" & "parametersforbatchfilehere", vbHidden)

    
por 07.06.2013 / 22:50
0

Comecei a tentar descobrir isso e nunca consegui. Isso foi o mais perto que cheguei:

@echo off
if not defined PIL (
    set PIL=1
    start /min "" %~0
    exit /b
)
TITLE Hello World
echo Hello world!
pause>nul
    
por 17.12.2012 / 18:03
0

Eu precisava ocultar a janela para um arquivo de lote chamado a partir de um menu de contexto do explorador e também precisava adicionar cotações no parâmetro. Nenhuma das respostas funcionou para mim, então estou adicionando minha própria solução.

Eu tinha isso no registro "comando" para um menu de contexto do explorador:

cmd /c C:\mypath\myprogram.bat "%1"

Então para substituí-lo eu tive que criar um vbs como este:

WScript.CreateObject ("WScript.shell").run "cmd /c C:\mypath\myprogram.bat """ & WScript.Arguments(0) & """", 0, False

Salvar em um lugar como C:\mypath\myscript.vbs e chamá-lo assim no registro:

wscript "C:\mypath\myscript.vbs" "%1"

Observe que o caminho .bat não pode ter espaços, então substitua-o pelo nome de arquivo 8.3. Portanto, por exemplo, C:\Program Files\myprogram.bat precisa ser referenciado como C:\Progra~1\myprogram.bat . Para ver o nome do arquivo 8.3, use dir /x

    
por 05.05.2018 / 12:39
0

Eu criei RunApp para fazer esse trabalho e também usá-lo no meu ambiente de produção, espero que ajude.

A configuração como abaixo:

arquivo: config.arg

:style:hidden

MyBatchFile.bat
arg1
arg2

E lance runapp.exe em seu lugar.

    
por 21.06.2018 / 10:15
-1

Isso funciona para o Windows 8 (possivelmente outros)

  1. Crie um arquivo em lote normalmente
  2. Crie um atalho para o arquivo em lote
  3. Clique com o botão direito no atalho > propriedades
  4. Clique em Layout
  5. Desmarque a opção "Permitir janela de posição do sistema"
  6. definir posição à esquerda tp -1000
  7. clique em aplicar

  8. Clique no atalho e ele será executado, mas você não o verá:)

por 16.08.2014 / 01:36