web-dev-qa-db-ja.com

Windowsバッチファイルからポップアップ/メッセージボックスを表示する

バッチファイルからメッセージボックスを表示する方法はありますか(Linuxのbashスクリプトからxmessageを使用する方法と同様)。

135
billyy

非常に単純なVBScriptファイルを作成し、CScriptを使用してそれを呼び出してコマンドラインパラメーターを解析します。

次のようなものがMessageBox.vbsに保存されました。

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

あなたはどのように呼ぶでしょう:

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

MsgBox reference このルートに興味があるならば。

111
boflynn

まず第一に、DOSはそれとは何の関係もありません、あなたはたぶんあなたはたぶんWindowsコマンドライン解決策が欲しいです(やはり:DOS、純粋なWindows、単なるWindowではなく、Console)。

Boflynnが提供するVBScriptメソッドを使用することも、net sendまたはmsgを誤って使用することもできます。 net sendは古いバージョンのWindowsでのみ動作します。

net send localhost Some message to display

ただし、これは実行するMessengerサービスにも依存します。

新しいバージョン(XP以降)の場合:

msg "%username%" Some message to display

msg.exeを使用して送信されたメッセージボックスは60秒間しか続かないことに注意してください。ただし、これは/time:xxスイッチで上書きできます。

120
Joey

少しフラッシュを表示することがありますが、一時ファイルは必要ありません。 (IIRC)IE5時代のどこかに戻ってすべての方法で動作するはずです。

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

ifを使用している場合は、 括弧をエスケープする を忘れないでください。

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

これにより、別のコマンドプロンプトウィンドウがポップアップ表示されます。

START CMD /C "ECHO My Popup Message && PAUSE"
69
Dave Webb

試してください:

Msg * "insert your message here" 

Windows XPのcommand.comを使用している場合は、これによりメッセージボックスが開きます。

新しいcmdウィンドウを開くことは、あなたが求めていたことではありません。 VBScript を使用して、これをあなたの.batファイルで使用することもできます。このコマンドでbatファイルからそれを開くでしょう:

cd C:\"location of vbscript"

これは、command.comが検索するディレクトリを変更してから、次の行に移動します。

"insert name of your vbscript here".vbs

それからあなたは新しい メモ帳 文書を作成し、入力してください

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

その後、これを.vbsファイルとして保存し(ファイル名の末尾に ".vbs"を追加して)、ファイル名の下のドロップダウンボックスに "All Files"として保存します(したがって、.txtとして保存されません) )をクリックしてから、[保存]をクリックします。

33
Justsomen00b

もっと多くの方法があります。

1)最もオタクでハッカ - それは単一のボタンでポップアップを作成する小さなexeを作成するためにIEXPRESSを使用します( it 2種類以上のポップアップメッセージを作成できます )。 XP以上のすべてのウィンドウで動作します。

;@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を使う。 XP以上のすべてのWindowsマシンでも動作します(ただし、OPには「外部」言語が必要ではありませんが、JavaScriptは最小化されています)。 .batとして保存する必要があります。

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

alert("Hello, world!");

または一行で:

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

または

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

または

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

3)これはパラメータ化された.bat/jscriptハイブリッドです(batとして保存する必要があります)。それは再びOPリクエストにもかかわらずJavaScriptを使いますが、それはバットなので心配することなくバットファイルとして呼び出すことができます。それは POPUP を使用しています---これはより一般的な MSGBOX よりも少し多くの制御を可能にします。これはWSHを使用しますが、上記の例のようにMSHTAは使用しません。

 @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)と1つのjscript.net/.batハイブリッド(.batとして保存する必要があります)。今回は.NETを使用し、削除可能な小さな.exeファイルをコンパイルします。

@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)そして最後にポップアップを作成するpowershellへの1回の呼び出し(powershellがインストールされていればバッチからも呼び出せます) :

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

6)そしてdbenhamのアプローチが見られました こちら

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

7)システムトレイの通知については、試してみることができます this

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

これにより、バッチファイルはVBSスクリプトを作成してポップアップを表示します。実行後、バッチファイルはその中間ファイルを削除します。

MSG.exeを使用しないことの利点は、それが本当にカスタマイズ可能であることです(タイトル、アイコンなどを変更する)。

echo MSGBOX "YOUR MESSAGE" > %temp%\TEMPmessage.vbs
call %temp%\TEMPmessage.vbs
del %temp%\TEMPmessage.vbs /f /q
26
dc1
echo X=MsgBox("Message Description",0+16,"Title") >msg.vbs

- あなたは0の代わりに0、1、2、3、4の任意の数を書くことができます(「+」記号の前に)。これがそれぞれの数の意味です:

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

- あなたは16の代わりに16,32,48,64から任意の数を書くことができます( '+'記号の後)&ここにそれぞれの数の意味があります:

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

これはウィンドウを作成する前にアセンブリをロードする必要のないPowerShellの変形です。

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

最後のパラメータを "0x0"から以下の値に変更してダイアログにアイコンを表示することができます(詳しくは ポップアップ方法 を参照してください)。

Stop 0x10停止
Question Mark 0x20疑問符
Exclamation Mark 0x30感嘆符
Information Mark 0x40情報マーク

Microsoft TechNetの記事 を参考にしてください。PowerTip:ポップアップウィンドウを表示するにはPowerShellを使用してください

9
User5910

メッセージ* "ここにメッセージを挿入してください"

メモ帳に.batファイルとして保存するか、フォーマットが「すべてのファイル」に設定されていることを確認してください。

7
Max Runacres

これを行うには、メッセージボックスを表示してバッチファイルから実行する小さなプログラムが必要です。

プロンプトを表示するコンソールウィンドウを開くこともできますが、cmd.exeとその友達だけを使ってGUIメッセージボックスを表示することはできません。

4
Macke
msg * /time:0 /w Hello everybody!

このメッセージは[OK]がクリックされるまで(これはデフォルトで1分しかかかりません)永遠に待機し、Windows 8.1では正常に機能します。

3
MoE bis

Zenity を使うことができます。 Zenityは、コマンドラインおよびシェルスクリプトでダイアログボックスの実行を可能にします。さらに詳しい情報は Wikipedia にもあります。

これはクロスプラットフォームです。Windows用のWindowsインストーラーが見つかります ここ

3
parvus

私はここからmsgbox.exeという名前のユーティリティを使用します。 http://www.paulsadowski.com/WSH/cmdprogs.htm

3
zhongshu

あなたはuser32.dllからdll関数を呼び出すことができます

Rundll32.exe user32.dll、メッセージボックス(0、 "テキスト"、 "タイトルテキスト"、{一番上のメッセージボックスのような追加のフラグe.t.c})

私の電話からそれを入力して、私を判断しないでください...そうでなければ私は余分なフラグをリンクするでしょう。

2
Entropy

@ Fowlの答えに続いて、あなたは以下を使用して10秒間だけ表示されるようにタイムアウトでそれを改善することができます。

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

詳しくは ここ を参照してください。

2
Rafi

バッチファイルを実行可能ファイルに変換(ラップ)すると、--- application これで可能になります。


  1. シンプルメッセージボックス

    %extd% /messagebox Title Text
    

  1. エラーメッセージボックス

    %extd% /messagebox  Error "Error message" 16
    
  2. キャンセル再試行メッセージボックス

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

4)「二度と聞かないでください」メッセージボックス

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

msg * /server:127.0.0.1メッセージをここに入力

1
Franco

より良い選択肢

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


説明:
lines=行数、および1
cols=メッセージ内の文字数に3を加えたもの(ただし、最小値は15でなければなりません)

colsの自動計算バージョン

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
T.Todua