Como exibir uma caixa de mensagem diretamente do CMD


16

Gostaria de exibir uma mensagem para o usuário usando o CMD. A maneira que sei fazer isso é criando um arquivo .vbs (VBScript) e execute-o no CMD desta maneira:

(echo MsgBox "Line 1" ^& vbCrLf ^& "Line 2",262192, "Title")> File.vbs

start File.vbs

Mas o que eu quero fazer é exibir a mensagem sem criar nenhum arquivo diretamente do CMD. Talvez usando um comando para executar VBScripts diretamente do CMD.


Procure o msgcomando. Você pode não a ter se estiver executando uma edição Home do Windows, mas pode adicioná-la apenas copiando e colando o msg.exe de uma instalação do Pro.
precisa

Gostaria algo um pouco mais "universal", para todas as versões do Windows 10, se houver uma maneira.
Bita

Há sempre powerhell também. Muitas vezes esquecido, embora a Microsoft tenha iniciado claramente a transição para a eliminação do prompt do cmd.
Appleoddity

Respostas:


9

Como outros disseram, não há como fazer isso puramente com o cmd, mas, embora esse seja o título da pergunta, parece-me que a parte sem arquivo é mais importante para você e, em certas circunstâncias, isso é possível.

Com o PowerShell, deve ser possível executar o código sem nenhum arquivo como este:

PowerShell -Command "Add-Type -AssemblyName PresentationFramework;[System.Windows.MessageBox]::Show('Hello World')"

O VBS não permite a execução direta de código via cscript ou wscript, mas o mshta permite. Você pode usá-lo assim (se precisar de várias linhas, use ':' como um delimitador):

mshta vbscript:Execute("msgbox ""Hello World"":close")

Como ele é baseado, ele pode ser afetado por algumas restrições de GPO; portanto, se você tiver a opção PowerShell, provavelmente é a aposta mais segura


Além do aviso acima mshta, alguns softwares antivírus consideram um processo potencialmente indesejado. No trabalho, minha tentativa de executá-lo resultou em um produto corporativo excessivamente zeloso (SentinelOne) para colocar em quarentena minha máquina inteira e removê-la da rede.
Jason

15

Conforme sugerido por @wysiwyg, nas versões Pro / Business * do Windows, você procura o Msgcomando. Está disponível em todas as versões modernas do Windows (pelo menos no XP). Para exibir uma mensagem para o usuário conectado no momento, execute o seguinte:

msg %username% Your message here

O resultado fica assim: insira a descrição da imagem aqui

Uma consideração com este comando é que você não pode personalizar o texto da barra de título.

Você pode aprender mais sobre Msg no TechNet .


* Se você precisar de uma solução que funcione em todas as edições do Windows, incluindo a Home , na minha opinião, o método VBScript que você já conhece é a solução mais simples para esse problema. Ele funciona em todas as versões e edições modernas do Windows em sua configuração padrão e é fácil de usar.


1
Não é inteiramente verdade. Havia um comando dps message box desde que o Windows saiu. Acredito que foi removido no Windows 7 ou 8, pois foi visto como uma possível exploração.
Keltari

2

Eu precisava de algo semelhante a isso hoje. Como não consegui encontrar uma solução de dependência externa de que gostei, já que não sou realmente fã de VBScript / Powershell, fui em frente e escrevi uma:

https://github.com/cubiclesoft/messagebox-windows

As caixas de mensagem produzidas são modais para a janela atual do console. Ou seja, o usuário não pode fazer nada até fechar a caixa de diálogo. Além disso, o código de retorno da MessageBox()chamada é retornado ao chamador para que um script possa reagir a qualquer botão pressionado. E, é claro, ele suporta toda a gama de opções para a MessageBox()API do Win32.

Adicionar um executável de 80 KB à mistura pode não ser a xícara de chá de todos. No entanto, ele está estaticamente vinculado ao tempo de execução do VC ++ e suporta Unicode, o que explica por que o arquivo é tão grande, dada a natureza minimalista do que faz. E há um pequeno problema de não conseguir passar facilmente novas linhas da linha de comando para exibir mensagens de várias linhas. Em um ponto positivo, ele exibe o diálogo em menos tempo do que qualquer outra solução apresentada até o momento.

Obviamente, se o tamanho do arquivo não importa e as caixas de diálogo criam uma experiência do usuário muito "na sua cara" e / ou não exigem interação do usuário, eu também me deparei com este projeto bacana:

https://www.paralint.com/projects/notifu/

Que exibe um balão pop-up na área de notificação de status da tela usando IUserNotification . A desvantagem é que o executável do Notifu executa apenas 240KB. Outro exemplo infeliz que o COM cria inchaço desnecessário e me deixa desejando que houvesse uma API simples e leve para o recurso.

Para algo multiplataforma, há zenidade. É principalmente para Linux, mas também existem portas para Mac e Windows. A porta do zenity para Windows tem mais de 1 MB de tamanho porque, bem, o GTK é bastante inchado.


Não é porque ele tem que enviar todo o gtk internamente, enquanto as versões nativas do Windows apenas capturam as DLLs user32 / comctl que já estão lá?
user1686

Hã? Por favor, esclareça a pergunta.
CubicleSoft

1

Eu tenho uma maneira de fazer isso com o cmd, mas basicamente inclui um arquivo, mas o arquivo é excluído instantaneamente após a execução do vbs. Então não é verdade. Você pode fazer :

echo x=msgbox("Hey! Here is a message!",Type+Icon+Action,"Hey! Here is a title!") > %tmp%\tmp.vbs
cscript //nologo %tmp%\tmp.vbs
del %tmp%\tmp.vbs

Digite + Icon + Action é apenas vbs básico, para uma referência, aqui. https://therevisionist.org/wp-content/uploads/2016/03/vbscript_msgbox_chart-e1458059002411.jpg?x47750 O código que mostrei para você cria um arquivo com código VBS e, em seguida, executa-o usando cscript. exclui o arquivo depois de executado, fazendo com que pareça ter sido chamado pelo prompt do cmd. Para torná-lo assim, basta usar @echo off. Espero que isso tenha ajudado!


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.