2009-10-29 12:42:48 +0000 2009-10-29 12:42:48 +0000
144
144

Executar um ficheiro batch de uma forma completamente oculta

Procuro uma forma de executar um ficheiro batch (.bat) sem nada visível para o utilizador (sem janela, sem nome da barra de tarefas, .etc.).

Não quero usar nenhum programa para isso, estou à procura de algo mais limpo. Encontrei uma solução que usa VBScript, mas também não gosto muito de usar VBS.

Respostas (23)

122
122
122
2009-10-29 16:29:10 +0000

Solução 1:

Guardar esta linha de texto como ficheiro invisible.vbs:

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

Para correr qualquer programa ou ficheiro batch invisivelmente, use-o assim:

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

Para também poder passar/transmitir 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"

Solution 2:

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

29
29
29
2012-06-29 21:06:44 +0000

Para ocultar ficheiros de lotes ou ficheiros de comando ou quaisquer ficheiros…. Utilize o utilitário integrado no Windows XP IExpress.exe para construir um ficheiro .EXE a partir do ficheiro de lote. Quando utilizar o IExpress certifique-se de que marca a opção run hidden e marque todas as caixas para não mostrar nada. Depois de criar o seu .exe coloque-o na pasta de comando run que escolher e nunca o verá aparecer.

10
10
10
2009-10-29 12:48:03 +0000

use Cmdow é um utilitário de linha de comando Win32 para NT4/2000/XP/2003 que permite que janelas sejam listadas, movidas, redimensionadas, renomeadas, ocultas/escondidas, desactivadas/activadas, minimizadas, maximizadas, restauradas, activadas/inactivadas, fechadas, mortas e muito mais.

Execute um ficheiro de lote oculto passando os seus parâmetros:-

cmdow /run /hid mybat arg1 “arg 2”.

10
10
10
2013-01-13 03:36:21 +0000

Se o seu Ficheiro de Lote pode caber numa linha e tantos caracteres, então basta usar um Atalho clicando com o botão direito do rato dentro de uma pasta colocada numa directoria aleatória, e saltar através do resto do assistente, e por último clicar com o botão direito do rato no atalho criado e clicar nas propriedades e sob o alvo, introduza o que normalmente colocaria num ficheiro de morcego. E Bobs o seu tio!

Pros:

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

Cons:

Limited to one line, so many characters
9
9
9
2009-10-29 12:49:03 +0000

Execute o script através de um trabalho sem o tornar interactivo:

at 11:00 script.bat

Outra solução, se não se importar de instalar algo como o Python, pode simplesmente criar um script e executá-lo com o pythonw (a versão ligada para operações GUI). Uma vez que não está a utilizar nenhuma API gráfica, a janela não aparecerá. Basta usar chamadas para os.system() e irá imitar um script batch, pois é o mesmo que digitar as strings na linha de comando.

Exemplo:

import os

os.system("tasklist > C:\tasks.txt")
os.system("ipconfig /all > C:\netinfo.log")
7
7
7
2014-05-12 08:25:28 +0000

Não gosto da solução VBScript.

Descarregue e copie nircmd.exe para a sua pasta %systemroot%\system32, depois adicione este comando à primeira linha do seu lote:

nircmd.exe win hide ititle "cmd.exe"

ou faça o seu título de lote personalizado primeiro com o comando title para evitar esconder todas as janelas cmd, como esta:

title MyBatch
nircmd.exe win hide ititle "MyBatch"
7
7
7
2009-10-29 15:54:30 +0000

Pode executá-lo facilmente.

start /MIN batch.cmd
6
6
6
2013-01-09 20:57:35 +0000

Utilizando o Windows7, pode utilizar o painel de controlo “Tarefa Programada” para programar um ficheiro de lote para correr em segundo plano de forma invisível com as permissões especificadas e até como conta “SYSTEM”. Veja a captura de ecrã abaixo:

Além disso, apesar de não ter tantas capacidades, também pode criar uma tarefa de script batch invisível como esta a partir da linha de comando usando o comando “AT.exe” sem a opção ‘/interactiva’.

5
5
5
2016-10-30 13:15:17 +0000

O excelente Bat To Exe Converter irá converter o seu ficheiro .bat ou .cmd para um ficheiro .exe.

Tem um simples UI. Pode escolher não ter uma janela de consola seleccionando uma opção Exe Format de XX Bit | Windows (Invisible). Também lhe permite atribuir um ícone, definir uma senha e várias outras opções.

4
4
4
2011-01-26 19:38:48 +0000

Parece que alguém fez uma lista das 7-8 formas de gerir o “silêncio”:

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

4
4
4
2017-06-19 08:27:15 +0000

YET ANOTHER way, de C/C++, é usar a função CreateProcess com a bandeira CREATE_NO_WINDOW. Tem uma grande potência extra não mostrada aqui. Este é apenas o mínimo necessário para substituir o sistema() 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 );
4
4
4
2017-04-16 14:03:20 +0000

Pode também criar um script AutoHotkey :

#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide
3
3
3
2014-09-24 17:58:35 +0000

Fi-lo com sucesso com nircmd desta forma:

  1. faça o download do nircmd.exe a partir do link
  2. crie o seu ficheiro .bat
  3. a primeira linha do ficheiro .bat tem de ser a seguinte: nircmd.exe win hide ititle "cmd.exe"
  4. seleccione ambos os ficheiros e crie um ficheiro auto-extracto usando o winrar
  5. no separador “general”, seleccione “create autoextract file” caixa
  6. no separador “advance” seleccione “autoextract” botão
  7. existe uma nova janela e seleccione o separador “mode” depois seleccione a opção: “esconder tudo”
  8. seleccione o separador “actualizar” e seleccione a opção “sobrescrever ficheiros existentes”
  9. Seleccione o separador “general” e defina uma pasta de destino para extracção se desejar e na caixa “Excecute after extraction” escreva o caminho completo onde o seu .bat será extraído. Ex: se definir a pasta de extracção como: “c:\windows\” então o caminho completo para excutar após a extracção será: “c:\windows\file.bat” (no caso do seu .bat ser nomeado: file.bat)
  10. Clique em aceitar em todas as janelas

Agora terá um ficheiro .exe que depois de clicar nele e instalar, o seu .bat correrá totalmente escondido.

2
2
2
2016-01-30 16:44:14 +0000

Adicionando aqui a minha resposta de outro post uma vez que era um duplicado e não vejo esta solução aqui, por isso agora há 17 respostas diferentes para como pode correr um ficheiro batch escondido. Vou apagar a minha resposta nesse post num futuro próximo.

Crie o seu script batch com a sua lógica de batch e comandos nele, e depois crie um novo ficheiro com a extensão .VBS, use a lógica abaixo (exemplo que forneci abaixo) e simplesmente ligue o caminho completo ao seu ficheiro .CMD ou .BAT com o PING -t <IPAddress>, etc. Assim ele executa o lote de forma oculta não mostrando a janela de comandos quando é executado.

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

Guarde o ficheiro .VBS e agende-o com Task Scheduler Problemas ao agendar uma tarefa no windows7 para correr numa agenda indefinida para as suas necessidades.

Caso contrário, basta clicar duas vezes no ficheiro .VBS para correr o comando infinito PING que colocou no ficheiro batch que o aponta para o que é necessário.

NOTE: Eu acredito que foi aqui que obtive esta lógica de script mas ela funciona de forma confiável para o mesmo propósito que você precisa aqui que é garantir que a janela de comando esteja oculta quando um arquivo batch é executado Server Fault Source

EXAMPLE VBS SCRIPT RUN COMMAND LINE BATCH BATCH HIDING CMD WINDOW

Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Folder\BatchFileName.cmd" & Chr(34), 0
Set WinScriptHost = Nothing
2
2
2
2012-10-12 07:16:50 +0000
  • Com um script pronto a usar (alguns deles bastante ricos em opções), e todos eles formam uma linha de comando, onde também é possível retornar o PID, as ferramentas usadas são IEXPRESS,SCHTASKS,WScript.Shell,Win32_Process e JScript.Net
2
2
2
2017-03-09 18:01:08 +0000

Apesar de eu já ter respondido, esta é outra abordagem. A diferença aqui é que o script batch pode se esconder durante sua execução. Você vai precisar de dois scripts adicionais - windowMode.bat e getCMDPid.bat (ambos contêm o código .net). Aqui como pode então 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
1
1
1
2011-07-02 09:04:44 +0000

Não precisa de fazer nenhum especial.

Se estiver a executar os ficheiros de lote a partir de um serviço Windows, estes devem estar escondidos por defeito, a menos que active a opção “Permitir que o serviço interaja com o ambiente de trabalho” no serviço.

1
1
1
2010-06-14 14:11:34 +0000
cmdow /run /hid "file.extention" arg1 "arg 2"
0
0
0
2018-05-05 10:39:45 +0000

Precisava de ocultar a janela para um ficheiro de lote chamado a partir de um menu de contexto do explorador, e também precisava de adicionar citações ao parâmetro. Nenhuma das respostas funcionou para mim, por isso estou a adicionar a minha própria solução.

Eu tinha isto no “comando” de registo para um menu de contexto de explorador:

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

Então para o substituir tive de criar um vbs como este:

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

Guardar num local como C:\mypath\myscript.vbs e chamá-lo assim no registo:

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

Note que o caminho .bat não pode ter espaços, por isso substitua-o pelo nome de ficheiro 8.3. Assim, por exemplo, C:\Program Files\myprogram.bat têm de ser referenciados como C:\Progra~1\myprogram.bat. Para ver o nome de ficheiro 8.3 use dir /x

0
0
0
2018-06-21 08:15:59 +0000

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

A configuração como abaixo:

file: config.arg

:style:hidden

MyBatchFile.bat
arg1
arg2

e lançar runapp.exe em seu lugar.

0
0
0
2013-06-07 20:50:58 +0000

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

0
0
0
2012-12-17 17:03:50 +0000

Comecei a tentar perceber isto e nunca consegui realmente. Isto foi o mais próximo que consegui:

@echo off
if not defined PIL (
    set PIL=1
    start /min "" %~0
    exit /b
)
TITLE Hello World
echo Hello world!
pause>nul
-1
-1
-1
2014-08-15 23:36:30 +0000

Isto funciona para as janelas 8 (possivelmente outras)

  1. Criar um ficheiro de lote como normal
  2. Criar um atalho para o ficheiro de lote
  3. Clique com o botão direito do rato no atalho > propriedades
  4. Clique em Layout
  5. Desmarque “Let system position window”
  6. defina a posição esquerda tp -1000
  7. clique em apply

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