Domanda

C'è un modo per visualizzare una finestra di messaggio da un file batch (simile a come xmessage può essere utilizzato da bash-script in Linux)?

È stato utile?

Soluzione

Vorrei fare un file VBScript molto semplice e chiamarlo usando CScript per analizzare i parametri della riga di comando.

qualcosa come il seguente salvati nella MessageBox.vbs:

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

Il che si sarebbe chiamata come:

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

MsgBox riferimento se sono interessati ad andare questo itinerario.

Altri suggerimenti

Prima di tutto, DOS non ha nulla a che fare con essa, probabilmente si desidera una soluzione a riga di comando di Windows. (Di nuovo: no DOS, puro di Windows, non solo una finestra, ma una console)

È possibile utilizzare il metodo VBScript fornito da boflynn o è possibile uso improprio o net send msg. net send funziona solo su versioni precedenti di Windows:

net send localhost Some message to display

Questo dipende anche il servizio Messenger per eseguire, però.

Per le versioni più recenti (XP e poi, a quanto pare):

msg "%username%" Some message to display

Si deve notare che una finestra di messaggio inviato utilizzando msg.exe durerà solo per 60 secondi. Questo può tuttavia essere sovrascritta con l'opzione /time:xx.

potrebbe visualizzare un piccolo lampo, ma nessun file temporanei necessari. Dovrebbe funzionare per tutto il tragitto da qualche parte in epoca (IIRC) IE5.

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

Non dimenticare di sfuggire al tuo parentesi se' Re utilizzando if:

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

Questo pop-up un'altra finestra Prompt dei comandi:

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

Prova:

Msg * "insert your message here" 

Se si utilizza command.com di Windows XP, si aprirà una finestra di messaggio.

Apertura di una nuova finestra cmd non è proprio quello che chiediamo è, mi sembra di capire. Si potrebbe anche usare VBScript , e utilizzare questo con il file .bat. Si potrebbe aprirlo dal file bat con questo comando:

cd C:\"location of vbscript"

Quello che fa è cambiare la directory command.com cercherà i file da, quindi alla riga successiva:

"insert name of your vbscript here".vbs

Poi si crea una nuova Notepad documento, digitare

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

Si potrebbe quindi salvare questo come un file vbs (mettendo ".vbs" alla fine del nome del file), salva come 'Tutti i file' nella goccia casella sotto il nome del file verso il basso (in modo che non salva come txt), quindi fare clic su Salva!

In questo modo il file batch creerà uno script VBS e mostrare un popup. Dopo viene eseguito, il file batch cancellerà quel file intermedio.

Il vantaggio di utilizzare MSGBOX è che è davvero customaziable (cambiare il titolo, l'icona, ecc), mentre MSG.EXE non è tanto.

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

Pochi altri modi.

1) Il geekiest e hackiest - utilizza l'IEXPRESS per creare piccole exe che creerà un pop-up con un solo tasto ( si può creare più di due tipi di messaggi pop-up ). Funziona su ogni Windows da XP e sopra:

;@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) MSHTA Utilizzando. Funziona anche su ogni macchina Windows da XP e versioni successive (nonostante il PO non vogliono lingue "esterne" è ridotto al minimo il JavaScript qui). Deve essere salvato come .bat:

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

alert("Hello, world!");

o in una sola riga:

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) Ecco parametrizzato .bat/jscript ibrido (deve essere salvato come bat). Esso utilizza di nuovo JavaScript, nonostante la richiesta di OP, ma in quanto è un pipistrello può essere chiamato come un file bat senza preoccupazioni. Esso utilizza POPUP che permette un po ' po 'più di controllo rispetto alla . Esso utilizza WSH, ma non MSHTA come nell'esempio qui sopra.

 @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) e un sistema ibrido jscript.net/.bat (deve essere salvato come .bat) .Questo tempo utilizza .NET e compila un piccolo file .exe che potrebbe essere cancellato:

@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) e alla fine una singola chiamata a PowerShell che crea un pop-up (può essere chiamato da riga di comando o da lotto se è installato PowerShell):

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

6) e l'approccio visto del dbenham qui

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

7 ) per un sistema di notifiche della barra si possono provare questo :

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

Ecco una PowerShell variante che non richiedono il caricamento di assemblee prima di creare la finestra, però funziona notevolmente più lenta (~+50%) rispetto a PowerShell MessageBox comando postato qui da @npocmaka:

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

È possibile modificare l'ultimo parametro da "0x0" per un valore inferiore a visualizzare le icone nella finestra di dialogo (vedi Popup Metodo Di per ulteriori riferimenti):

        Stop 0x10 Stop
        Question Mark 0x20 punto Interrogativo
        Exclamation Mark 0x30 punto Esclamativo
        Information Mark 0x40 Informazioni Marco

Adattato dall'articolo della Microsoft TechNet PowerTip:Utilizzare PowerShell per Visualizzare la Finestra Pop-Up.

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

-si può scrivere qualsiasi numero da 0,1,2,3,4, invece di 0 (prima del simbolo ‘+’) e qui è il significato di ogni numero:

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

-si può scrivere qualsiasi numeri 16,32,48,64 invece di 16 (dopo il simbolo ‘+’) e qui è il significato di ogni numero:

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

Msg * "inserire qui il tuo messaggio"

funziona bene, solo salvare come file .bat in notepad o assicurarsi che il formato è impostato su "tutti i file"

Per fare questo, è necessario disporre di un piccolo programma che visualizza una messagebox ed eseguire che dal file batch.

Si potrebbe aprire una finestra di console che visualizza un prompt, però, ma ottenendo una finestra di messaggio GUI utilizzando cmd.exe e gli amici solo non è possibile, per quanto ne so.

Io uso un programma di utilità di nome msgbox.exe da qui: http://www.paulsadowski.com/WSH/cmdprogs.htm

È possibile utilizzare Zenity . Zenity permette l'esecuzione di finestre di dialogo script della riga di comando e shell. Maggiori informazioni si possono trovare anche su Wikipedia .

E 'cross-platform: un programma di installazione di Windows per Windows può essere trovato qui <. / p>

msg * /time:0 /w Hello everybody!

Questo messaggio aspetta sempre fino a quando si fa clic su OK (dura un solo minuto per impostazione predefinita) e funziona bene in Windows 8.1

È possibile richiamare la funzione DLL da user32.dll penso Qualcosa di simile

  

Rundll32.exe user32.dll, MessageBox (0, "testo", "TitleText", {bandiere in più per come più in alto MessageBox e.t.c})

Digitando dal mio telefono, non giudicarmi ... altrimenti avrei collegare i flag extra.

* msg /server:127.0.0.1 Scrivi il tuo messaggio qui

Una soluzione migliore

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


Descrizione:
importo lines= di linee, più 1
importo cols= di caratteri nel messaggio, più 3 (Tuttavia, minima deve essere 15)

Versione cols Auto-calcolata:

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"

ha solo bisogno di popup quando all'interno di una macchina virtuale, quindi tecnicamente, ci dovrebbe essere qualche codice come:

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