Como não acredito que isso possa ser feito simplesmente por meio de um arquivo .bat, isso parece um trabalho para AutoHotKey .
AutoHotkey (AHK) is a free, open-source macro-creation and automation software for Windows that allows users to automate repetitive tasks. It is driven by a scripting language that was initially aimed at providing keyboard shortcuts, otherwise known as hotkeys, that over time evolved into a full-fledged scripting language.
De acordo com este post do fórum de 2014 , você deve ser capaz de alternar a visibilidade da janela com um script semelhante para isso:
#NoTrayIcon
#Persistent
global hBatFile
/* Setup Tray icon and add item that will handle
* double click events
*/
Menu Tray, Icon
Menu Tray, Icon, C:\windows\system32\cmd.exe
Menu Tray, Add, Show / Hide Pingu, TrayClick
Menu Tray, Add, Close Pingu, CloseItem
Menu Tray, Default, Show / Hide Pingu
;// Run program or batch file hidden
DetectHiddenWindows On
Run pingu.bat,, Hide, PID
WinWait ahk_pid %PID%
hBatFile := WinExist()
DetectHiddenWindows Off
return
TrayClick:
OnTrayClick()
return
;// Show / hide program or batch file on double click
OnTrayClick() {
if DllCall("IsWindowVisible", "Ptr", hBatFile) {
WinHide ahk_id %hBatFile%
} else {
WinShow ahk_id %hBatFile%
WinActivate ahk_id %hBatFile%
}
}
CloseItem() {
DetectHiddenWindows On
WinWait ahk_class ConsoleWindowClass
Process, Close, cmd.exe
DetectHiddenWindows Off
ExitApp
}
Este script foi testado com o AutoHotKey 1.1.24.00 (maio de 2016).
EDIT: Aqui está um link para a versão modificada do OP com melhorias
Neste caso:
- pingu.bat é o nome (arbitrário) do arquivo em lote que desejamos executar
- hBatFile é um nome de variável arbitrária que contém algumas informações da janela
- Pingu é um nome arbitrário que aparece nos itens adicionais do menu da bandeja AHK
Basta salvar o script como algo como "tray.ahk" (observe a extensão de script .ahk) e clique duas vezes para executar (supondo que você tenha instalado o AutoHotKey).
O script inicia o arquivo de lote minimizado e substitui o ícone padrão do script AHK por um ícone de janela do console em miniatura na bandeja.
A visibilidade da janela do console pode ser alternada com um clique duplo no ícone da bandeja ou no item de menu da bandeja adicionada (exibida em negrito na parte inferior do menu de seleção).
Fechar o arquivo de lote e a janela de comando pode ser feito com o item de menu "Fechar" adicionado abaixo de "Mostrar / ocultar" ("Sair" fechará apenas o script, não a janela do console).
Observe também que
Run pingu.bat,, Hide, PID
obviamente precisará que o "pingu.bat" seja substituído pelo nome do seu próprio arquivo de lote. Esta linha assume que o script AHK aparece no mesmo diretório que "pingu.bat" ou que "pingu.bat" é globalmente acessível (isto é, foi adicionado a uma pasta em seu caminho do sistema ou variáveis PATH do usuário). Caso contrário, você desejará substituir "pingu.bat" pelo caminho completo para o executável (observe os espaços!).
Advertências
Esse script funciona principalmente como uma interface para a visibilidade da janela. O que isto significa é que se você "Sair" através do ícone da bandeja, você está saindo apenas do script AHK, não do seu arquivo de lote.
A solução simples é usar o item de menu "Fechar" para sair do script e parar cmd.exe. Caso contrário, você pode mostrar a janela do console e Ctrl-C (ou simplesmente fechar a janela do console com o 'X' vermelho) para finalizar o processo em lote e selecionar "Sair" no ícone da bandeja para parar o script AHK. processos separados, como mencionado.
Observação : Programas de console órfãos com janelas ocultas não podem ser acessados diretamente novamente se o script AHK for encerrado com "Sair" primeiro - mas você pode usar o Gerenciador de Tarefas para feche o processo cmd.exe associado com bastante facilidade.
Por fim, o item de menu "Fechar", conforme escrito, funciona bem se houver apenas um processo cmd.exe. No entanto, se mais de um estiver em execução, isso pode não fechar corretamente o arquivo de lote iniciado com o script (ele pode fechar outra coisa). Você pode querer examinar o fechamento por ID do processo. Caso contrário, você pode "Mostrar", sair do script em lote e, em seguida, "Sair" do script AHK como acima.
Notas do script
Menu Tray, Icon, C:\windows\system32\cmd.exe
refere-se ao local de um executável compilado com um arquivo de ícone incorporado associado. Você deve poder substituir isso por uma referência a qualquer executável com um ícone incorporado ou com uma referência direta a um arquivo de ícone .ico, por exemplo,
Menu Tray, Icon, C:\Path\To\Icons\icon.ico