DISABLE ADBLOCK

ADBlock está bloqueando parte del contenido en el sitio

ADBlock errore

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

StackOverflow https://stackoverflow.com/questions/774175

Pregunta

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

Solución

Me gustaría hacer un archivo VBScript muy simple y llamarlo usando CScript para analizar los parámetros de línea de comandos.

algo como lo siguiente guardan en MessageBox.vbs:

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

Lo que ustedes llamarían como:

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

MsgBox referencia si están interesados ​​en ir esta ruta.

OTROS CONSEJOS

En primer lugar, el DOS no tiene nada que ver con ello, es probable que quieren una solución de línea de comandos de Windows. (De nuevo: no DOS, puro de Windows, simplemente no es una ventana, pero una consola)

También se puede usar el método de VBScript proporcionada por boflynn o Puede mal uso o net send msg. net send sólo funciona en versiones anteriores de Windows:

net send localhost Some message to display

Esto también depende del servicio de mensajería para funcionar, sin embargo.

Para las versiones más nuevas (XP y en adelante, al parecer):

msg "%username%" Some message to display

Debe tenerse en cuenta que un cuadro de mensaje enviado a través de msg.exe solamente tendrá una duración de 60 segundos. Sin embargo, esto puede ser anulado con el interruptor /time:xx.

podría mostrar un poco de flash, pero no hay archivos de la temperatura requerida. En caso de trabajar todo el camino de vuelta a algún lugar de la era (IIRC) IE5.

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

No se olvide de escapar de sus paréntesis si' re usando if:

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

Este pop-up otra ventana de símbolo del sistema:

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

Probar:

Msg * "insert your message here" 

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

Abrir una nueva ventana de cmd no es exactamente lo que pido es, supongo. También es posible usar VBScript , y usar esto con el archivo .bat. Se podría abrirlo desde el archivo bat con este comando:

cd C:\"location of vbscript"

Lo que esto hace es cambiar el directorio de command.com buscará los archivos de, a continuación, en la siguiente línea:

"insert name of your vbscript here".vbs

A continuación, se crea un nuevo documento Bloc de notas , escriba

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

A continuación, guardarlo como un archivo .vbs (por poner ".vbs" al final del nombre de archivo), guardar como 'todos los archivos' en el cuadro desplegable debajo del nombre del archivo hacia abajo (por lo que no guarda como .txt), a continuación, haga clic en Guardar

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

La ventaja de usar MSGBOX es que es muy customaziable (cambiar 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

Pocos más formas.

1) El geekiest y hackiest - que utiliza el IEXPRESS para crear exe pequeña que va a crear una ventana emergente con un solo botón ( se puede crear dos tipos más de mensajes emergentes ). Funciona en todas las ventanas de XP y anteriores:

;@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) Uso MSHTA. También funciona en todas las máquinas de Windows desde XP y superior (a pesar de la OP no quieren idiomas "externos" al código JavaScript escrito aquí se reduce al mínimo). 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á híbrido .bat/jscript parametrizado (debe ser guardado como bat). Se vuelve a utilizar JavaScript pesar de la solicitud OP pero como es un murciélago se le puede llamar como un archivo bat sin preocupaciones. Utiliza POPUP que permite un poco poco más de control que el . 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 ser guardado como .bat) .Esta vez que utiliza .NET y compila un archivo .exe pequeña que podría suprimirse:

@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 (que se puede llamar desde la línea de comandos o de lote si se ha instalado PowerShell):

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

6) y enfoque visto del dbenham aquí

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

7 ) para un sistema de notificaciones de la bandeja que puede probar este :

call SystemTrayNotification.bat  -tooltip warning -time 3000 -title "Woow" -text "Boom" -icon question

Esta es una variante de PowerShell que no requiere de carga de elementos antes de crear la ventana, sin embargo se ejecuta mucho más lento (~ 50%) que el comando de mensaje PowerShell publicado aquí por @npocmaka:

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

Puede cambiar el último parámetro de "0x0" a un valor inferior para mostrar los iconos en el diálogo (ver emergente Método para mayor referencia):

Stop 0x10 Detener
signo de interrogación 0x20 signo de interrogación
signo de exclamación 0x30 signo de exclamación
información marca Información 0x40 marca

Adaptado del artículo de Microsoft TechNet Superconsejo:. El uso de PowerShell para mostrar ventana emergente

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

-se puede escribir cualquier número de 0,1,2,3,4 lugar de 0 (antes de que el símbolo ‘+’) y aquí es 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  

-se puede escribir cualquier número de 16,32,48,64 en lugar de 16 (después del símbolo ‘+’) y aquí es el significado de cada número:

16 – Critical Icon  
32 – Warning Icon  
48 – Warning Message Icon   
64 – Information Icon  

Msg * "escribir aquí su mensaje"

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

Con el fin de hacer esto, es necesario tener un pequeño programa que muestra un cuadro de mensaje y correr que a partir de su archivo por lotes.

Se puede abrir una ventana de consola que muestra una petición de embargo, pero conseguir un cuadro de mensaje GUI mediante cmd.exe amigos y sólo no es posible, que yo sepa.

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

Puede utilizar Zenity . Zenity permite la ejecución de los cuadros de diálogo en los scripts de la línea de comando y concha. Más información se puede encontrar en Wikipedia .

Es multiplataforma: un instalador de Windows para Windows se puede encontrar aquí <. / p>

msg * /time:0 /w Hello everybody!

Este mensaje de espera siempre hasta que se hace clic en OK (que dura tan solo un minuto por defecto) y funciona bien en Windows 8.1

Tras @ respuesta de las aves, se puede mejorar con un tiempo de espera a aparecer sólo durante 10 segundos utilizando la siguiente:

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

aquí para más detalles.

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

  

Rundll32.exe user32.dll, MessageBox (0, "texto", "TitleText", {banderas adicionales para como superior de mensaje e.t.c})

Al escribir desde mi teléfono, no me juzguen ... de lo contrario sería vincular las banderas adicionales.

Mensaje * /server:127.0.0.1 Escriba aquí su mensaje

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: cantidad lines= Red de líneas, más 1 cantidad
cols= de caracteres en el mensaje, más 3 (Sin embargo, deberá ser como mínimo 15)

calculada Auto-versión cols:

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"

Necesita solamente emergente cuando dentro de una máquina virtual, por lo que técnicamente, debe haber algún código como:

if %machine_type% == virtual_machine then
   echo message box code
else
   continue normal installation code