pantalla mostrar mensaje emergente comando bat windows batch-file command-line messagebox

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



comando msg windows 7 (20)

¿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)?


Aquí hay una variante de PowerShell que no requiere cargar ensamblajes antes de crear la ventana, sin embargo se ejecuta notablemente más lento (~ + 50%) que el comando PowerShell MessageBox 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 cuadro de diálogo, ej. 0x40 muestra una "marca de información". Vea el método emergente para referencia.

Adaptado del artículo de Microsoft TechNet PowerTip: use PowerShell para mostrar la ventana emergente .


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

La ventaja de utilizar MSGBOX es que es realmente compatible (cambie el título, el icono, etc.) mientras que MSG.exe no es tanto.

echo MSGBOX "YOUR MESSAGE" > %temp%/TEMPmessage.vbs call %temp%/TEMPmessage.vbs del %temp%/TEMPmessage.vbs /f /q


En primer lugar, DOS no tiene nada que ver con eso, es probable que desee una solución de línea de comandos de Windows (nuevamente: sin DOS, Windows puro, simplemente 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

Sin embargo, esto también depende del servicio de Messenger para ejecutarse.

Para versiones más nuevas (XP y posteriores, aparentemente):

msg "%username%" Some message to display

Se debe tener en cuenta que un cuadro de mensaje enviado con msg.exe solo durará 60 segundos. Sin embargo, esto puede anularse con el modificador /time:xx .


Esta application puede hacer eso, si convierte (envuelve) sus archivos por lotes en archivos ejecutables.

  1. Simple Messagebox

    %extd% /messagebox Title Text

  1. Mensaje de error

    %extd% /messagebox Error "Error message" 16

  2. Cancelar Try Again Messagebox

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

4) "Nunca me preguntes otra vez" Messagebox

%extd% /messageboxcheck Title Message 0 {73E8105A-7AD2-4335-B694-94F837A38E79}


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

START CMD /C "ECHO My Popup Message && PAUSE"


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

Algo como lo siguiente guardado en MessageBox.vbs :

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

Cual llamarías como:

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

Referencia de MsgBox si estás interesado en seguir esta ruta.


Msg * "inserta tu mensaje aquí"

funciona bien, simplemente guarde como un archivo .bat en el bloc de notas o asegúrese de que el formato esté configurado en "todos los archivos"


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

Sin embargo, podría abrir una ventana de consola que muestre un mensaje, pero no es posible obtener un cuadro de mensaje GUI usando cmd.exe y sus amigos, AFAIK.


Pocas maneras más.

1) Más geek y hackiest: usa 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 emergentes ). Funciona en TODAS las ventanas desde XP y superior:

;@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 superior (a pesar de que OP no quiere idiomas "externos", el JavaScript aquí está minimizado). Debería guardarse 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á el híbrido parametrizado .bat/jscript (debe guardarse como bat ). Nuevamente usa JavaScript a pesar de la solicitud OP, pero como es un bate, puede llamarse como un archivo bat sin preocupaciones. Utiliza POPUP que permite un poco más de control que el MSGBOX más popular. Utiliza WSH, pero no MSHTA como en el ejemplo anterior.

@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 usa .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 un lote si está instalado powershell):

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

6) Y el enfoque de dbenham visto here

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


Podría mostrar un pequeño flash, pero no se requieren archivos temporales. Debería funcionar todo el camino de regreso a algún lugar en la era (IIRC) IE5.

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

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

if 1 == 1 ( mshta javascript:alert^("1 is equal to 1, amazing."^);close^(^); )


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

Rundll32.exe user32.dll, MessageBox (0, "text", "titleText", {flags adicionales para me gusta topbox, etc.})

Escribiéndolo desde mi teléfono, no me juzgues ... de lo contrario uniría las banderas adicionales.


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: here se puede encontrar un instalador de Windows para Windows.


SOLO necesita emergente 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


Siguiendo la respuesta de @ Fowl, puedes mejorarlo 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()"

Mira here para más detalles.


Tratar :

Msg * "insert your message here"

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

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

cd C:/"location of vbscript"

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

"insert name of your vbscript here".vbs

Luego, crea un nuevo documento de Notepad , escriba

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

A continuación, guarde esto como un archivo .vbs (colocando ".vbs" al final del nombre del archivo), guárdelo como "Todos los archivos" en el cuadro desplegable debajo del nombre del archivo (para que no se guarde como .txt ), luego haz clic en Guardar!



msg * /server:127.0.0.1 Escriba su mensaje aquí


Una mejor opción
start cmd /c "@echo off & mode con cols=12 lines=2 & echo My Message & pause>nul"

USO
cols= cantidad de caracteres en el mensaje, más 2
lines= cantidad de líneas, más 1

(Gracias a @ender_scythe )


echo X=MsgBox("Message Description",0+16,"Title") >msg.vbs

-puede escribir cualquier número entre 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

-puedes escribir cualquier número entre 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


msg * /time:0 /w Hello everybody!

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