Question

Y at-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 bash scripts sous Linux)?

Était-ce utile?

La solution

Je voudrais faire un fichier VBScript très simple et appeler à l'aide CScript pour analyser les paramètres de ligne de commande.

Quelque chose comme ce qui suit enregistrés dans MessageBox.vbs:

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

Ce qui vous appelleriez comme:

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

MsgBox référence si vous sont intéressés à aller dans cette voie.

Autres conseils

Tout d'abord, DOS n'a rien à voir avec elle, vous voulez probablement une solution de ligne de commande Windows. (Nouveau: pas DOS, pur de Windows, mais pas une fenêtre, mais une console)

Vous pouvez utiliser la méthode VBScript fournie par boflynn ou vous pouvez la mauvaise utilisation ou net send msg. net send ne fonctionne que sur les anciennes versions de Windows:

net send localhost Some message to display

Cela dépend aussi du service Messenger de fonctionner, bien.

Pour les versions plus récentes (XP et en avant, apparemment):

msg "%username%" Some message to display

Il convient de noter qu'une boîte de message envoyé à l'aide msg.exe ne durera pendant 60 secondes. Cependant, cela peut être outrepassée avec le commutateur /time:xx.

peut afficher un petit flash, mais aucun fichier temp nécessaire. Si le travail tout le chemin du retour à quelque part dans le (IIRC) ère IE5.

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

Ne pas oublier de échapper à vos parenthèses si vous re en utilisant if:

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

Ce pop-up une autre fenêtre d'invite de commande:

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

De cette façon, votre fichier batch va créer un script VBS et afficher un popup. Une fois qu'il est exécuté, le fichier de commandes supprime ce fichier intermédiaire.

L'avantage d'utiliser MSGBOX est qu'il est vraiment customaziable (changer le titre, l'icône, etc.), tandis que msg.exe est pas autant.

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

Peu d'autres façons.

1) Le geekiest et hackiest - il utilise le IEXPRESS pour créer petit exe qui va créer un pop-up avec un seul bouton ( il peut créer deux types de messages pop-up ). Fonctionne sur tous les fenêtres de XP et ci-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 de XP et plus (en dépit de l'OP ne veulent pas que les langues « externes » JavaScript est réduite au minimum ici). Devrait être enregistré en tant que .bat:

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

alert("Hello, world!");

ou dans 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 hybride paramétrés de .bat/jscript (doit être enregistré sous bat). Il utilise à nouveau JavaScript malgré la demande OP mais comme il est une chauve-souris, il peut être appelé comme un fichier de chauve-souris sans soucis. Il utilise POPUP qui permet un peu peu plus de contrôle que la 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 hybride jscript.net/.bat (doit être enregistré sous .bat) .Ce temps il utilise .NET et compile un petit fichier .exe 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 un pop-up (peut être appelé 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)

vu l'approche du dbenham
start "" cmd /c "echo(&echo(&echo              Hello world!     &echo(&pause>nul"

7 ) Pour une notification de plateau de système, vous pouvez essayer cette :

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

Voici une variante PowerShell qui ne nécessite pas le chargement des assemblages avant de créer la fenêtre, mais il fonctionne sensiblement plus lent (+ 50%) que la commande MessageBox PowerShell posté ici par @npocmaka:

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

Vous pouvez modifier le dernier paramètre de « 0x0 » à une valeur inférieure pour afficher les icônes dans la boîte de dialogue (voir Méthode Popup à titre de référence):

0x10 Arrêter
question Mark 0x20 question Mark
Exclamation Mark 0x30 Exclamation Mark
information Mark 0x40 information Mark

Adapté de l'article Microsoft TechNet POWERTIP. Utilisez PowerShell pour afficher des pop-up fenêtre

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

peut écrire des -Tu nombres de 0,1,2,3,4 au lieu de 0 (avant le symbole « + ») et est le sens ici de chaque numéro:

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

peut écrire des -Tu chiffres de 16,32,48,64 au lieu de 16 (après le symbole « + ») et est ici le sens de chaque numéro:

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

Msg * "insérez ici votre message"

fonctionne très bien, il suffit de sauvegarder comme un fichier .bat dans le bloc-notes ou assurez-vous que le format est réglé sur « tous les fichiers »

Pour ce faire, vous devez avoir un petit programme qui affiche un MessageBox et exécuter que de votre fichier batch.

Vous pouvez ouvrir une fenêtre de console qui affiche une invite bien, mais obtenir une boîte de message GUI en utilisant cmd.exe et les amis n'est pas possible, autant que je sache.

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

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

Il est multi-plateforme: un programme d'installation de Windows pour Windows se trouve <. / p>

msg * /time:0 /w Hello everybody!

Ce message attend toujours jusqu'à ce que vous cliquez sur OK (il ne dure qu'une minute par défaut) et fonctionne très bien dans Windows 8.1

À la suite @ la réponse de Fowl, vous pouvez l'améliorer avec un délai d'attente d'apparaître seulement pendant 10 secondes en utilisant les éléments suivants:

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

Voir pour plus de détails.

Vous pouvez appeler la fonction dll user32.dll je pense Quelque chose comme

  

Rundll32.exe user32.dll, MessageBox (0, "texte", "titletext", {drapeaux supplémentaires pour comme e.t.c} messagebox le plus élevé)

La saisie manuelle de mon téléphone, ne me jugez pas ... sinon je relier les drapeaux supplémentaires.

* msg /server:127.0.0.1 Tapez votre message ici

Cette application peut le faire, si vous convertissez (wrap) vos fichiers batch en les fichiers exécutables.


  1. Simple Messagebox

    %extd% /messagebox Title Text
    

  1. Erreur Messagebox

    %extd% /messagebox  Error "Error message" 16
    
  2. Annuler Try Again Messagebox

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

4) "Ne plus me demander" Messagebox

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

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: montant
de lines= de lignes, plus 1
quantité de cols= de caractères dans le message, plus 3 (Toutefois, le minimum doit être 15)

Version cols calculée Auto:

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"

il suffit de pop-up lorsque l'intérieur d'une machine virtuelle, donc techniquement, il devrait y avoir un code comme:

if %machine_type% == virtual_machine then
   echo message box code
else
   continue normal installation code
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top