Frage

Gibt es eine Möglichkeit, ein Meldungsfeld aus einer Batchdatei (ähnlich wie xmessage von Bash-Skripts in Linux verwendet werden kann)?

anzuzeigen
War es hilfreich?

Lösung

würde ich eine sehr einfache VBScript-Datei machen und nenne es CScript mit den Befehlszeilenparameter zu analysieren.

So etwas wie die in MessageBox.vbs gespeichert folgenden:

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

Welche würden Sie nennen wie:

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

MsgBox Referenz , wenn Sie interessiert ist, diesen Weg in gehen.

Andere Tipps

Zu allererst DOS hat nichts damit zu tun, werden Sie wahrscheinlich eine Windows-Befehlszeilen Lösung wollen. (Wieder: keine DOS, reine Windows nur kein Fenster, sondern eine Konsole)

Sie können entweder die VBScript-Methode von boflynn benutzen, oder Sie können falschen Gebrauch net send oder msg. net send funktioniert nur bei älteren Versionen von Windows:

net send localhost Some message to display

Dies hängt auch von dem Messenger-Dienst auszuführen, though.

Für neuere Versionen (XP und weiter, scheinbar):

msg "%username%" Some message to display

Es ist zu beachten, dass ein Meldungsfeld mit msg.exe gesendet wird nur für 60 Sekunden dauern. Dies kann jedoch mit dem /time:xx Schalter außer Kraft gesetzt werden.

Könnte ein wenig Blitz angezeigt, aber keine temporären Dateien erforderlich. Sollte funktionieren den ganzen Weg zurück zu irgendwo in der (IIRC) IE5 Ära.

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

Vergessen Sie nicht, Ihre Klammern zu entkommen , wenn Sie‘ re mit if:

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

Dies wird eine weitere Eingabeaufforderung Fenster Pop-up:

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

Versuchen:

Msg * "insert your message here" 

Wenn Sie Windows XP command.com verwenden, wird dies ein Meldungsfenster öffnen.

ein neues cmd Fenster zu öffnen, ist nicht ganz das, was Sie fragen, entnehme ich. Sie können auch VBScript , und verwenden Sie diese mit Ihrer .bat Datei verwenden. Sie würden sie von der BAT-Datei mit diesem Befehl öffnen:

cd C:\"location of vbscript"

Was das bedeutet ist das Verzeichnis command.com von Dateien suchen ändern, dann in der nächsten Zeile:

"insert name of your vbscript here".vbs

Dann erstellen Sie eine neue Notepad Dokument, geben Sie

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

Sie würden dann speichern dies als eine VBS-Datei (durch „vbs“ am Ende des Dateinamen setzen), wie ‚Alle Dateien‘ speichert in der Dropdown-Feld unter dem Dateinamen (damit es nicht speichern als .txt), dann klicken Sie auf Speichern!

Auf diese Weise Ihre Batch-Datei ein VBS-Skript wird und ein Pop-up zeigen. Nachdem es läuft, wird die Batchdatei, die Zwischendatei löschen.

Der Vorteil MSGBOX ist, dass es wirklich customaziable ist (den Titel ändern, das Symbol usw.), während MSG.EXE ist nicht so viel.

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

Ein paar mehr Möglichkeiten.

1) Die geekiest und hackiest - der IEXPRESS verwendet kleine exe zu erstellen, die ein Pop-up mit einer einzigen Taste ( kann es zwei weitere Arten von Pop-up-Nachrichten erstellen ). Funktioniert auf jedem Windows ab XP und höher:

;@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) Mit MSHTA. Funktioniert auch auf jedem Windows-Rechner von XP und höher (trotz der OP nicht will, „externe“ Sprachen der JavaScript hier wird minimiert). Sollte als .bat gespeichert werden:

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

alert("Hello, world!");

oder in einer Zeile ein:

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

oder

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

oder

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

3) Hier ist parametrisierte .bat/jscript Hybrid (sollte als bat gespeichert werden). Es nutzt wieder JavaScript trotz der OP Anfrage, aber da es eine Fledermaus ist, kann es als eine Fledermaus-Datei ohne Sorgen genannt werden. Es verwendet POPUP denen ermöglicht ein wenig etwas mehr Kontrolle als die populäreren MSGBOX rel="nofollow . Es verwendet WSH, aber nicht MSHTA wie im Beispiel oben.

 @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) und eine jscript.net/.bat Hybrid (sollte als .bat gespeichert werden) .Diese Zeit .NET verwendet und erstellt eine kleine .exe-Datei, die gelöscht werden:

@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) und am Ende eines einziger Aufruf von Powershell, die ein Pop-up erstellt (kann von der Kommandozeile oder aus Batch aufgerufen werden, wenn Powershell installiert ist):

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

6) Und das Konzept der dbenham hier gesehen

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

7 ) für eine System-Tray-Benachrichtigungen können Sie versuchen, diese :

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

Hier ist eine Powershell-Variante, die nicht Ladeanordnungen erfordern vor dem Fenster zu schaffen, aber es läuft deutlich langsamer (~ + 50%) als die Powershell MessageBox Befehl hier von @npocmaka geschrieben:

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

Sie können die letzten Parameter ändern von „0x0“ auf einen Wert unter im Dialog Symbole angezeigt (siehe Popup Method für weitere Referenz):

0x10 Stopp
Question Mark 0x20 Fragezeichen
Ausrufezeichen 0x30 Ausrufezeichen
Information Mark 0x40 Informationen Mark

von dem Microsoft TechNet-Artikel Angepasst Powertipp:. Verwenden Sie Powershell-Pop-Up-Fenster anzeigen

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

-Sie kann beliebige Zahlen von 0,1,2,3,4 statt 0 (vor dem Symbol ‚+‘) schreiben und hier ist die Bedeutung der einzelnen Nummer:

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

-Sie kann beliebige Zahlen von 16,32,48,64 statt 16 (nach dem ‚+‘ Symbol) schreiben und hier ist die Bedeutung der einzelnen Nummer:

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

Msg * "Bitte geben Sie Ihre Nachricht hier"

funktioniert gut, nur speichern als .bat-Datei in Notepad oder stellen Sie sicher, das Format auf „alle Dateien“ eingestellt ist

Um dies zu tun, müssen Sie ein kleines Programm, das eine messagebox zeigt, und führen Sie das aus Ihrer Batch-Datei.

Sie können ein Konsolenfenster öffnen, wenn eine Eingabeaufforderung angezeigt wird, aber ein GUI-Meldungsfeld mit cmd.exe und Freunden immer nur ist nicht möglich, AFAIK.

Ich benutze ein Dienstprogramm msgbox.exe von hier genannt: http://www.paulsadowski.com/WSH/cmdprogs.htm

Sie können mit Zenity . Zenity ermöglicht die Ausführung von Dialogfeldern in Befehlszeile und Shell-Skripten. Weitere Informationen können auch auf Wikipedia .

Es ist Cross-Plattform: Windows Installer für Windows finden Sie hier <. / p>

msg * /time:0 /w Hello everybody!

Diese Meldung wartet immer, bis OK geklickt wird (es ist standardmäßig nur 1 Minute dauert) und funktioniert gut in Windows 8.1

Im Anschluss an @ Fowl Antwort, können Sie es mit einem Timeout verbessern können nur 10 Sekunden lang angezeigt werden mit dem folgenden:

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

Siehe hier für weitere Details.

Sie können DLL-Funktion von user32.dll aufrufen ich denke, So etwas wie

  

Rundll32.exe user32.dll, MessageBox (0, "Text", "title", {Extra-Flaggen für wie oberste messagebox e.t.c})

Typing es von meinem Telefon, mich nicht beurteilen ... sonst würde ich die zusätzlichen Flags verbinden.

msg * /server:127.0.0.1 Ihre Nachricht

Die Anwendung das tun können, wenn Sie konvertieren (wrap) Batch-Dateien in ausführbare Dateien.


  1. Einfache Messagebox

    %extd% /messagebox Title Text
    

  1. Fehler Messagebox

    %extd% /messagebox  Error "Error message" 16
    
  2. Abbrechen Erneut versuchen Messagebox

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

4) "mich nie fragen" Messagebox

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

Eine bessere Option

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


Beschreibung:
lines= Menge von Linien, plus 1
cols= Menge von Zeichen in der Nachricht, plus 3 (jedoch mindestens sein 15 muss)

Auto-berechnet 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"

Es braucht nur zu Popup, wenn innerhalb eines vm, so technisch, sollte es einige Code wie:

if %machine_type% == virtual_machine then
   echo message box code
else
   continue normal installation code
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top