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)?
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.
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
.
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^(^);
)
ceci va faire apparaître une autre fenêtre D'invite de commande:
START CMD /C "ECHO My Popup Message && PAUSE"
, 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!
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
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
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
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",
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 .
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.
j'utilise un utilitaire nommé msgbox.exe à partir 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 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 .
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
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.
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.
Ce application peut faire, si vous convertir (wrap) d'un lot de fichiers dans des fichiers exécutables.
-
Simple Messagebox
%extd% /messagebox Title Text
-
Erreur Messagebox
%extd% /messagebox Error "Error message" 16
-
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}
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"
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