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.