Mostrar un cuadro emergente/mensaje de un archivo por lotes de Windows


¿Hay alguna manera de mostrar un cuadro de mensaje desde un archivo por lotes (similar a cómo se puede usar xmessage desde bash-scripts en Linux)?

Author: sashoalm, 2009-04-21

20 answers

Haría un archivo VBScript muy simple y lo llamaría usando CScript para analizar los parámetros de la línea de comandos.

Algo como lo siguiente guardado en MessageBox.vbs:

Set objArgs = WScript.Arguments
messageText = objArgs(0)
MsgBox messageText

Que llamarías como:

cscript MessageBox.vbs "This will be shown in a popup."

MsgBox referencia si estás interesado en seguir esta ruta.

 101
Author: boflynn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-18 15:09:50

En primer lugar, DOS no tiene nada que ver con esto, probablemente desee una solución de línea de comandos de Windows (de nuevo: no DOS, Windows puro, solo no una ventana, sino una consola).

Puede usar el método VBScript proporcionado por boflynn o puede usar mal net send o msg. net send solo funciona en versiones anteriores de Windows:

net send localhost Some message to display

Esto también depende del servicio de Mensajería que se ejecute.

Para versiones más recientes (XP y en adelante, aparentemente):

msg "%username%" Some message to display

Cabe señalar que un cuadro de mensaje enviado usando msg.exe solo durará 60 segundos. Sin embargo, esto puede ser anulado con el interruptor /time:xx.

 109
Author: Joey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-07 07:30:12

Puede mostrar un poco de flash, pero no se requieren archivos temporales. Debería funcionar todo el camino de vuelta a algún lugar en la era (IIRC) IE5.

mshta javascript:alert("Message\n\nMultiple\nLines\ntoo!");close();

No te olvides de escapar de tus paréntesis si estás usando if:

if 1 == 1 (
   mshta javascript:alert^("1 is equal to 1, amazing."^);close^(^);
)
 81
Author: Fowl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:50

Esto abrirá otra ventana del Símbolo del sistema:

START CMD /C "ECHO My Popup Message && PAUSE"
 63
Author: Dave Webb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-21 19:45:11

Intenta:

Msg * "insert your message here" 

Si está utilizando Windows XP command.com, esto abrirá un cuadro de mensaje.

Abrir una nueva ventana cmd no es exactamente lo que estabas pidiendo, deduzco. También puede usar VBScript , y usar esto con su .bat file. Lo abrirías desde el archivo bat con este comando:

cd C:\"location of vbscript"

Lo que esto hace es cambiar el directorio command.com buscará archivos desde, luego en la siguiente línea:

"insert name of your vbscript here".vbs

Luego crea un nuevo Bloc de notas documento, escriba

<script type="text/vbscript">
    MsgBox "your text here"
</script>

Entonces guardarías esto como a .vbs file (by putting ".vbs " al final del nombre del archivo), guarde como "Todos los archivos" en el cuadro desplegable debajo del nombre del archivo (para que no se guarde como .txt), a continuación, haga clic en Guardar!

 31
Author: Unihedron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-20 10:05:10

De esta manera su archivo por lotes creará un script VBS y mostrará una ventana emergente. Después de que se ejecute, el archivo por lotes eliminará ese archivo intermedio.

La ventaja de usar MSGBOX es que es realmente personalizable (cambiar el título, el icono, etc.) mientras MSG.exe no es tanto.

echo MSGBOX "YOUR MESSAGE" > %temp%\TEMPmessage.vbs
call %temp%\TEMPmessage.vbs
del %temp%\TEMPmessage.vbs /f /q
 25
Author: dc1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-10 21:36:33

Pocas maneras más.

1) El geekiest y hackiest-utiliza el IEXPRESS para crear un pequeño exe que creará un pop-up con un solo botón ( puede crear dos tipos más de mensajes pop-up). Funciona en TODAS las ventanas de XP y superiores:

;@echo off
;setlocal

;set ppopup_executable=popupe.exe
;set "message2=click OK to continue"
;
;del /q /f %tmp%\yes >nul 2>&1
;
;copy /y "%~f0" "%temp%\popup.sed" >nul 2>&1

;(echo(FinishMessage=%message2%)>>"%temp%\popup.sed";
;(echo(TargetName=%cd%\%ppopup_executable%)>>"%temp%\popup.sed";
;(echo(FriendlyName=%message1_title%)>>"%temp%\popup.sed"
;
;iexpress /n /q /m %temp%\popup.sed
;%ppopup_executable%
;rem del /q /f %ppopup_executable% >nul 2>&1

;pause

;endlocal
;exit /b 0


[Version]
Class=IEXPRESS
SEDVersion=3
[Options]
PackagePurpose=InstallApp
ShowInstallProgramWindow=1
HideExtractAnimation=1
UseLongFileName=0
InsideCompressed=0
CAB_FixedSize=0
CAB_ResvCodeSigning=0
RebootMode=N
InstallPrompt=%InstallPrompt%
DisplayLicense=%DisplayLicense%
FinishMessage=%FinishMessage%
TargetName=%TargetName%
FriendlyName=%FriendlyName%
AppLaunched=%AppLaunched%
PostInstallCmd=%PostInstallCmd%
AdminQuietInstCmd=%AdminQuietInstCmd%
UserQuietInstCmd=%UserQuietInstCmd%
SourceFiles=SourceFiles
[SourceFiles]
SourceFiles0=C:\Windows\System32\
[SourceFiles0]
%FILE0%=


[Strings]
AppLaunched=subst.exe
PostInstallCmd=<None>
AdminQuietInstCmd=
UserQuietInstCmd=
FILE0="subst.exe"
DisplayLicense=
InstallPrompt=

2) Usando MSHTA. También funciona en todas las máquinas windows desde XP y superiores(a pesar de la OP no quieren lenguajes "externos" el JavaScript aquí se minimiza). Debe ser guardado como .bat:

@if (true == false) @end /*!
@echo off
mshta "about:<script src='file://%~f0'></script><script>close()</script>" %*
goto :EOF */

alert("Hello, world!");

O en una línea:

mshta "about:<script>alert('Hello, world!');close()</script>"

O

mshta "javascript:alert('message');close()"

O

mshta.exe vbscript:Execute("msgbox ""message"",0,""title"":close")

3) Aquí está parametrizado .bat/jscript híbrido (debe guardarse como bat). De nuevo utiliza JavaScript a pesar de la solicitud de OP, pero como es un bat se puede llamar como un archivo bat sin preocupaciones. Utiliza POPUP que permite un poco más de control que el más popular MSGBOX. Usa WSH, pero no MSHTA como en el ejemplo arriba.

 @if (@x)==(@y) @end /***** jscript comment ******
     @echo off

     cscript //E:JScript //nologo "%~f0" "%~nx0" %*
     exit /b 0

 @if (@x)==(@y) @end ******  end comment *********/


var wshShell = WScript.CreateObject("WScript.Shell");
var args=WScript.Arguments;
var title=args.Item(0);

var timeout=-1;
var pressed_message="button pressed";
var timeout_message="timed out";
var message="";

function printHelp() {
    WScript.Echo(title + "[-title Title] [-timeout m] [-tom \"Time-out message\"] [-pbm \"Pressed button message\"]  [-message \"pop-up message\"]");
}

if (WScript.Arguments.Length==1){
    runPopup();
    WScript.Quit(0);
}

if (args.Item(1).toLowerCase() == "-help" || args.Item(1).toLowerCase() == "-h" ) {
    printHelp();
    WScript.Quit(0);
}

if (WScript.Arguments.Length % 2 == 0 ) {
    WScript.Echo("Illegal arguments ");
    printHelp();
    WScript.Quit(1);
}

for (var arg = 1 ; arg<args.Length;arg=arg+2) {

    if (args.Item(arg).toLowerCase() == "-title") {
        title = args.Item(arg+1);
    }

    if (args.Item(arg).toLowerCase() == "-timeout") {
        timeout = parseInt(args.Item(arg+1));
        if (isNaN(timeout)) {
            timeout=-1;
        }
    }

    if (args.Item(arg).toLowerCase() == "-tom") {
        timeout_message = args.Item(arg+1);
    }

    if (args.Item(arg).toLowerCase() == "-pbm") {
        pressed_message = args.Item(arg+1);
    }

    if (args.Item(arg).toLowerCase() == "-message") {
        message = args.Item(arg+1);
    }
}

function runPopup(){
    var btn = wshShell.Popup(message, timeout, title, 0x0 + 0x10);

    switch(btn) {
        // button pressed.
        case 1:
            WScript.Echo(pressed_message);
            break;

        // Timed out.
        case -1:
           WScript.Echo(timeout_message);
           break;
    }
}

runPopup();

4) y un híbrido jscript.net/.bat (debe guardarse como .bat) .Esta vez utiliza .NET y compila un pequeño archivo .exe que podría eliminarse:

@if (@X)==(@Y) @end /****** silent jscript comment ******

@echo off
::::::::::::::::::::::::::::::::::::
:::       compile the script    ::::
::::::::::::::::::::::::::::::::::::
setlocal


::if exist "%~n0.exe" goto :skip_compilation

:: searching the latest installed .net framework
for /f "tokens=* delims=" %%v in ('dir /b /s /a:d /o:-n "%SystemRoot%\Microsoft.NET\Framework\v*"') do (
    if exist "%%v\jsc.exe" (
        rem :: the javascript.net compiler
        set "jsc=%%~dpsnfxv\jsc.exe"
        goto :break_loop
    )
)
echo jsc.exe not found && exit /b 0
:break_loop



call %jsc% /nologo /out:"%~n0.exe" "%~f0" 
::::::::::::::::::::::::::::::::::::
:::       end of compilation    ::::
::::::::::::::::::::::::::::::::::::
:skip_compilation

::
::::::::::
"%~n0.exe" %*
::::::::
::
endlocal
exit /b 0

****** end of jscript comment ******/

import System;
import System.Windows;
import System.Windows.Forms

var arguments:String[] = Environment.GetCommandLineArgs();
MessageBox.Show(arguments[1],arguments[0]);

5) y al final una sola llamada a powershell que crea una ventana emergente (se puede llamar desde la línea de comandos o desde el lote si powershell está instalado):

powershell [Reflection.Assembly]::LoadWithPartialName("""System.Windows.Forms""");[Windows.Forms.MessageBox]::show("""Hello World""", """My PopUp Message Box""")

6) Y el enfoque de dbenham visto aquí

start "" cmd /c "echo(&echo(&echo              Hello world!     &echo(&pause>nul"

7) Para una bandeja de sistema notificaciones puedes probar esto :

call SystemTrayNotification.bat  -tooltip warning -time 3000 -title "Woow" -text "Boom" -icon question
 25
Author: npocmaka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-02 15:29:26
echo X=MsgBox("Message Description",0+16,"Title") >msg.vbs

–puede escribir cualquier número desde 0,1,2,3,4 en lugar de 0 (antes del símbolo'+') y aquí está el significado de cada número:

0 = Ok Button  
1 = Ok/Cancel Button  
2 = Abort/Retry/Ignore button  
3 = Yes/No/Cancel  
4 = Yes/No  

–puede escribir cualquier número desde 16,32,48,64 en lugar de 16 (después del símbolo'+') y aquí está el significado de cada número:

16 – Critical Icon  
32 – Warning Icon  
48 – Warning Message Icon   
64 – Information Icon  
 9
Author: p2013,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-10 15:00:00

Msg * "inserte su mensaje aquí"

Funciona bien, simplemente guardar como a.bat archivo en el bloc de notas o asegúrese de que el formato se establece en "todos los archivos"

 7
Author: Max Runacres,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-21 22:38:00

Aquí hay una variante de PowerShell que no requiere cargar ensamblados antes de crear la ventana, sin embargo, se ejecuta notablemente más lento (~+50%) que el comando MessageBox de PowerShell publicado aquí por @npocmaka:

powershell (New-Object -ComObject Wscript.Shell).Popup("""Operation Completed""",0,"""Done""",0x0)

Puede cambiar el último parámetro "0x0" para mostrar diferentes iconos en el diálogo, por ejemplo. 0x40 muestra una "marca de información". Véase Método emergente para referencia.

Adaptado del artículo de Microsoft TechNet PowerTip: Use PowerShell para mostrar una ventana emergente Ventana.

 5
Author: User5910,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-22 20:27:52

Para hacer esto, necesita tener un pequeño programa que muestre un messagebox y lo ejecute desde su archivo por lotes.

Puede abrir una ventana de consola que muestre un mensaje, pero obteniendo un cuadro de mensaje GUI usando cmd.exe y amigos solo no es posible, AFAIK.

 4
Author: Macke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-18 09:05:38

Uso una utilidad llamada msgbox.exe desde aquí: http://www.paulsadowski.com/WSH/cmdprogs.htm

 3
Author: zhongshu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-21 07:25:13

Puedes usar Zenity. Zenity permite la ejecución de cuadros de diálogo en línea de comandos y scripts de shell. Más información también se puede encontrar en Wikipedia.

Es multiplataforma: se puede encontrar un instalador de Windows para Windows aquí.

 3
Author: parvus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-16 09:52:27
msg * /time:0 /w Hello everybody!

Este mensaje espera para siempre hasta que se haga clic en Aceptar (dura solo un minuto por defecto) y funciona bien en Windows 8.1

 3
Author: MoE bis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-26 04:48:36

Puede invocar la función dll desde user32.dll creo que Algo así como

Rundll32.exe user32.dll, MessageBox (0, "text", "titleText", {banderas adicionales para messagebox como superior e.t.c})

Escribiendo desde mi teléfono, no me juzgues... de lo contrario, enlazaría las banderas adicionales.

 2
Author: Entropy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-19 01:50:52

Siguiendo la respuesta de @Fowl, puedes mejorarla con un tiempo de espera para que solo aparezca durante 10 segundos usando lo siguiente:

mshta "javascript:var sh=new ActiveXObject( 'WScript.Shell' ); sh.Popup( 'Message!', 10, 'Title!', 64 );close()"

Ver aquí para más detalles.

 2
Author: Rafi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:29

Msg * / server: 127.0.0.1 Escriba su mensaje aquí

 1
Author: Franco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-22 00:08:20

Esta aplicación puede hacer eso, si convierte (wrap) sus archivos por lotes en archivos ejecutables.


  1. Simple Messagebox

    %extd% /messagebox Title Text
    

  1. Error Messagebox

    %extd% /messagebox  Error "Error message" 16
    
  2. Cancelar Inténtalo de nuevo Messagebox

    %extd% /messagebox Title "Try again or Cancel" 5
    

4) "Nunca me preguntes de nuevo" Messagebox

%extd% /messageboxcheck Title Message 0 {73E8105A-7AD2-4335-B694-94F837A38E79}
 1
Author: someone23432,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-27 03:40:19

Una mejor opción

set my_message=Hello world&& start cmd /c "@echo off & mode con cols=15 lines=2 & echo %my_message% & pause>nul"


Descripción:
lines= cantidad de líneas, más 1
cols= cantidad de caracteres en el mensaje, más 3 (Sin embargo, el mínimo debe ser 15)

Autocalculado cols versión:

set my_message=Hello world&& (echo %my_message%>EMPTY_FILE123 && FOR %? IN (EMPTY_FILE123 ) DO SET strlength=%~z? && del EMPTY_FILE123 ) && start cmd /c "@echo off && mode con lines=2 cols=%strlength% && echo %my_message% && pause>nul"

 0
Author: T.Todua,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-23 07:44:00

SOLO necesita aparecer cuando está dentro de una vm, por lo que técnicamente, debería haber algún código como:

if %machine_type% == virtual_machine then
   echo message box code
else
   continue normal installation code
 -2
Author: Illegal Alien,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-20 09:06:20