Afficher un popup / boîte de message à partir D'un fichier Windows batch

Existe-t-il un moyen d'afficher une boîte de message à partir d'un fichier batch (similaire à la façon dont xmessage peut être utilisé à partir de bash-scripts sous Linux)?

122
demandé sur sashoalm 2009-04-21 23:21:54

20 réponses

je ferais un fichier VBScript très simple et l'appellerais en utilisant CScript pour analyser les paramètres de la ligne de commande.

quelque chose comme ce qui suit sauvé dans MessageBox.vbs :

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

que vous appelleriez comme:

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

MsgBox référence si vous êtes intéressé à suivre cette voie.

101
répondu boflynn 2014-09-18 15:09:50

tout d'abord, DOS n'a rien à voir avec cela, vous voulez probablement une solution Windows en ligne de commande (encore une fois: PAS DE DOS, Windows pur, juste pas une fenêtre, mais une Console).

vous pouvez utiliser la méthode VBScript fournie par boflynn ou vous pouvez Mal utiliser net send ou msg . net send fonctionne uniquement sur les anciennes versions de windows:

net send localhost Some message to display

cela dépend aussi du service de Messager à exécuter, cependant.

pour nouvelles versions (XP et suivantes, apparemment):

msg "%username%" Some message to display

il est à noter qu'une boîte de message envoyée en utilisant msg.exe ne durera que 60 secondes. Il est cependant possible de passer outre avec le commutateur /time:xx .

109
répondu Joey 2017-10-07 07:30:12

peut afficher un petit flash, mais pas de fichiers temp nécessaires. Devrait fonctionner tout le chemin du retour vers quelque part dans L'ère (IIRC) IE5.

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

N'oubliez pas de escape your parentheses si vous utilisez if :

if 1 == 1 (
   mshta javascript:alert^("1 is equal to 1, amazing."^);close^(^);
)
81
répondu Fowl 2017-05-23 12:02:50

ceci va faire apparaître une autre fenêtre D'invite de commande:

START CMD /C "ECHO My Popup Message && PAUSE"
63
répondu Dave Webb 2009-04-21 19:45:11

, Essayez :

Msg * "insert your message here" 

si vous utilisez Windows XP command.com, ceci ouvrira une boîte de message.

ouvrir une nouvelle fenêtre cmd n'est pas tout à fait ce que vous demandiez, je crois. Vous pouvez également utiliser VBScript , et l'utiliser avec votre .le fichier bat. Vous ouvrez à partir du fichier bat avec cette commande:

cd C:\"location of vbscript"

ce que cela fait est de changer le répertoire command.com recherche des fichiers de, puis sur la ligne suivante:

"insert name of your vbscript here".vbs

puis vous créez un nouveau Bloc-notes document, tapez

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

vous sauvegarderiez alors ceci comme un .fichier vbs (en mettant ".vbs" à la fin du nom de fichier), enregistrez-le en tant que "Tous les Fichiers" dans la liste déroulante ci-dessous le nom de fichier (afin de ne pas enregistrer sous .txt), puis cliquez sur Enregistrer!

31
répondu Unihedron 2014-09-20 10:05:10

de cette façon, votre fichier batch va créer un script VBS et afficher un popup. Après son exécution, le fichier batch supprimer ce fichier intermédiaire.

L'avantage D'utiliser MSGBOX est qu'il est vraiment personnalisable (changer le titre, l'icône etc) tout en MSG.exe n'est pas aussi bien.

echo MSGBOX "YOUR MESSAGE" > %temp%\TEMPmessage.vbs
call %temp%\TEMPmessage.vbs
del %temp%\TEMPmessage.vbs /f /q
25
répondu dc1 2011-10-10 21:36:33

encore quelques façons.

1) le geekiest et le hackiest-il utilise L'IEXPRESS pour créer Petit exe qui va créer une pop-up avec un seul bouton ( il peut créer deux autres types de messages pop-up ). Fonctionne sur toutes les fenêtres à partir de XP et au-dessus:

;@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) en utilisant MSHTA . Fonctionne également sur toutes les machines windows à partir de XP et au-dessus (malgré L'OP do ne veut pas de langues" externes " le JavaScript ici est minimisé). Doit être enregistré comme .bat :

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

alert("Hello, world!");

ou sur une ligne:

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

ou

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

ou

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

3) voici paramétré .bat/jscript hybride (devrait être enregistré comme bat ). Il utilise à nouveau JavaScript malgré la requête OP mais comme il s'agit d'une bat, il peut être appelé fichier bat sans soucis. Il utilise POPUP qui permet un peu plus de contrôle que le plus populaire MSGBOX . Il utilise WSH, mais pas MSHTA comme dans l'exemple ci-dessus.

 @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) et un jscript.net/.bat hybride (doit être enregistré comme .bat ) .Cette fois, il utilise .NET et compile un petit .exe fichier qui pourrait être supprimé:

@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) et à la fin un seul appel à powershell qui crée une pop-up (peut être appelé à partir de la ligne de commande ou de lot si powershell est installé):

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

6) et l'approche du dbenham vu ici

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

7 ) pour une notification de plateau de système vous pouvez essayer ce :

call SystemTrayNotification.bat  -tooltip warning -time 3000 -title "Woow" -text "Boom" -icon question
25
répondu npocmaka 2018-07-02 15:29:26
echo X=MsgBox("Message Description",0+16,"Title") >msg.vbs

- vous pouvez écrire n'importe quels nombres de 0,1,2,3,4 au lieu de 0 (avant le symbole‘+’) et voici le sens de chaque nombre:

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

- vous pouvez écrire n'importe quel nombre de 16,32,48,64 au lieu de 16 (après le symbole‘+’) et voici la signification de chaque nombre:

16 – Critical Icon  
32 – Warning Icon  
48 – Warning Message Icon   
64 – Information Icon  
9
répondu p2013 2015-07-10 15:00:00

Msg * "insérez votre message ici"

fonctionne très bien.bat fichier dans le bloc-notes ou assurez-vous que le format est réglé sur "tous les fichiers",

7
répondu Max Runacres 2011-02-21 22:38:00

voici une variante de PowerShell qui ne nécessite pas d'assemblages de chargement avant de créer la fenêtre, cependant elle fonctionne sensiblement plus lentement (~+50%) que la commande de MessageBox de PowerShell postée ici par @npocmaka:

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

vous pouvez modifier le dernier paramètre" 0x0 " pour afficher différentes icônes dans la boîte de dialogue, ex. 0x40 montre un "mark". Voir méthode Popup pour référence.

adapté de Microsoft Article de TechNet PowerTip: utiliser PowerShell pour afficher la fenêtre Pop-Up .

5
répondu User5910 2017-02-22 20:27:52

pour ce faire, vous devez avoir un petit programme qui affiche une boîte de messagerie et exécuter cela à partir de votre fichier batch.

vous pouvez ouvrir une fenêtre de console qui affiche une invite, mais en obtenant une boîte de message GUI en utilisant cmd.l'exe et les Amis seulement N'est pas possible, AFAIK.

4
répondu Macke 2013-03-18 09:05:38

j'utilise un utilitaire nommé msgbox.exe à partir d'ici: http://www.paulsadowski.com/WSH/cmdprogs.htm

3
répondu zhongshu 2009-11-21 07:25:13

vous pouvez utiliser Zenity . Zenity permet l'exécution de boîtes de dialogue en ligne de commande et les scripts shell. Plus d'informations peuvent également être trouvées sur Wikipedia .

c'est multiplateformes: un installateur Windows Pour Windows peut être trouvé ici .

3
répondu parvus 2012-07-16 09:52:27
msg * /time:0 /w Hello everybody!

ce message attend à jamais JUSQU'à ce que OK soit cliqué (il ne dure qu'une minute par défaut) et fonctionne correctement sous Windows 8.1

3
répondu MoE bis 2016-05-26 04:48:36

vous pouvez invoquer la fonction dll de l'utilisateur 32.dll je pense Quelque chose comme

Rundll32.exe user32.dll, MessageBox (0, "texte", "textedetitre", {extra drapeaux pour comme supérieur messagebox e.t.c})

tapant sur mon téléphone, ne me juge pas... sinon, je relierais les drapeaux supplémentaires.

2
répondu Entropy 2015-10-19 01:50:52

suite à la réponse de @Fowl, vous pouvez l'améliorer avec un temps d'arrêt pour apparaître seulement 10 secondes en utilisant ce qui suit:

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

voir ici pour plus de détails.

2
répondu Rafi 2017-05-23 12:34:29

msg * /serveur:127.0.0.1 Tapez votre message ici

1
répondu Franco 2012-07-22 00:08:20

Ce application peut faire, si vous convertir (wrap) d'un lot de fichiers dans des fichiers exécutables.


  1. Simple Messagebox

    %extd% /messagebox Title Text
    

  1. Erreur Messagebox

    %extd% /messagebox  Error "Error message" 16
    
  2. Annuler Essayer De Nouveau Messagebox

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

4) "Ne me demandez plus jamais "Messagebox

%extd% /messageboxcheck Title Message 0 {73E8105A-7AD2-4335-B694-94F837A38E79}
1
répondu someone23432 2015-08-27 03:40:19

une meilleure option

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


Description:

lines= montant des lignes, plus 1

cols= nombre de caractères dans le message, plus 3 (Cependant, le minimum doit être 15 )

calcul automatique cols version:

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
répondu T.Todua 2018-06-23 07:44:00

il suffit de popup à l'intérieur d'une vm, donc techniquement, il devrait y avoir un code comme:

if %machine_type% == virtual_machine then
   echo message box code
else
   continue normal installation code
-2
répondu Illegal Alien 2015-07-20 09:06:20