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


153

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


CMD.EXEは、DOSコマンドをサポートする32ビットのコマンドプロセッサです。
Alan B

7
これは、Windowsコマンドプロンプトと呼ばれます。
Ricardo Polo Jaramillo 2011年

回答:


121

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

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

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

あなたはどのように呼びますか:

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

MsgBoxこのルートに行くことに興味がある場合は参照してください。


ファイルを作成してこのデータを書き込み、使用するよりも削除することで、ファイルを作成することはできません。
正常に

1
すばらしい答えです。このようにして、アイコン、ボタン、ボックスのタイトルを完全に制御できます。また、ファイルをPATHのどこかに保存する場合は、任意の場所から呼び出します。異なるアイコンでアラート用のファイルをいくつか作成しました。
Deus777

いいね。ところで、少なくともWin10では、CScriptを使用する必要はありません。CScriptでは、コマンドプロンプトに追加のテキストが表示されます。CScriptがない場合、警告のみが表示されます。これはすばらしいことです
神の子

cscriptがありませんでした。代わりにstartを使用しました。
sureshvv 2017年

127

まず第一に、DOSはそれとは何の関係もありません。おそらく、Windowsコマンドラインソリューションが必要です(ここでも、DOSなし、純粋なWindows、ウィンドウではなくコンソールです)。

あなたはどちらかboflynnが提供するVBScriptのメソッドを使用するか、誤使用することができますnet sendmsgnet send古いバージョンのWindowsでのみ機能します。

net send localhost Some message to display

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

新しいバージョンの場合(XP以降、どうやら):

msg "%username%" Some message to display

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


2
環境変数を使用して、ローカルユーザー-%USERNAME%を取得できます。msg.exeは私のXP Homeマシンにありますが、Vistaのすべてのバージョンにあるわけではないという事例話を聞いています。NET SENDの背後にあるサービスは最近無効になっていると思います。
McDowell

ええ、ありがとう、envvarを忘れてしまいました(%UserProfile%と自分で定義したものをバッチで使用することはめったにありません:))。おかしいですが、メッセンジャーサービスはあなたの言うとおりです。XP VMにも存在しませんが、ネット送信はまだ存在します。msg.exeはそこで機能します。
ジョーイ

18
実行可能なオプションが回答から欠落していると思い、それを提供しました。ここで問題はありません。あなたは何かをすることを強いられていると感じる必要もなければ、ボフリンが間違っていると私が何とか言っているわけでもありません。正解が1つもない質問には完全に適切な別のオプションを追加しただけです。さらに、おそらくこの質問をしているのはあなただけではありません。他の人は、何らかの理由でVBScriptの使用を望まないかもしれません。これはコミュニティサイトです。あなただけではありません:-)
Joey

8
私はこれを使用して、リモートシェルからガールフレンドのPCに「I love you」メッセージを生成しました。
Camilo Martin

1
Windows 8および10で、Windowsのバージョンの問題を見つけました。私にとってはプロでは機能しますが、家では機能しません。Home PremiumやEnterprise、Ultimateなどで動作することを報告している人もいます。普通の古い家ではそれを取得できないようです(System32には存在しませんが、追加できます)。
shox

84

少しフラッシュが表示される場合がありますが、一時ファイルは必要ありません。(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^(^);
)

これはコマンドプロンプトから完全に機能しますが、バッチファイルに貼り付けると、次のエラーが発生しますclose() was unexpected at this time
eye_mew 14

@eye_mewこれらの^エスケープ文字をbatファイルから削除する必要があるかもしれません
phuclv 2015年

1
バッチファイルから完全に機能しました(Windows 7を使用しています)この方法でJavascriptを実行できますか?バッチファイルに値をどのように返しますか?
ジェリージェレミア2016年

1
ここに、あなたができることのいくつかの驚くべき例があります:dostips.com/forum/viewtopic.php ?t=5311 LocalDateTimeの例は値を返します。アイデアをありがとう!
ジェリーエレミヤ2016年

サーバーサイドJavaScriptがクールになる前にMicrosoftがnode.jsをクールにした-チャンスを逃した。
Daniel Sokolowski 2017年

76

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

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

1
素晴らしいty!私はこれを他のいくつかのスクリプトで使用するかもしれません:)
billyy 2009

3
より良いオプションは次のとおりです:start cmd /c "@echo off & mode con cols=18 lines=2 & echo My Popup Message & pause>nul"、をcols=18メッセージ内の文字数+2 に変更します。そして、lines=2行の数が+1であるものに。
ender_scythe

1
一時停止をcmd /k
解除

34

試してください:

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」を付ける)、ファイル名の下のドロップダウンボックスに「すべてのファイル」として保存します(したがって、.txtとして保存されません) )、次に[保存]をクリックします。


3
<script/>タグは必要ありません。
surfasb '25年

?使用時にテキストに改行(空白行)を挿入する方法-> MSG * <text>
ZEE

@ZEEだけを使用する場合はmsg *、メッセージの後にctrl-Zを入力するように求められます。ここにメッセージに表示される改行を入力できます。
User5910

30

いくつかの方法があります。

1) geekiestとhackiest-IEXPRESSを使用して、1つのボタンでポップアップを作成する小さなexeを作成します(さらに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を使用しますが、batなので、心配せずにbatファイルとして呼び出すことができます。これは、使用しています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)システムトレイ通知の場合、これを試すことができます。

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

29

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

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

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

15

ウィンドウを作成する前にアセンブリをロードする必要のないPowerShellバリアントは次のとおりですが、@ npocmakaがここに投稿したPowerShell MessageBoxコマンドよりも著しく遅く実行されます(〜+ 50%)。

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

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

        やめる0x10停止
        疑問符0x20疑問符
        エクスクラメーション・マーク0x30感嘆符
        情報マーク0x40情報マーク

Microsoft TechNetの記事PowerTip:PowerShellを使用してポップアップウィンドウを表示するから転載


10
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  

2
VBスクリプトからどのように応答を受け取りますか?
Suit Boyアプリ

7

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

正常に機能します。メモ帳で.batファイルとして保存するか、形式が「すべてのファイル」に設定されていることを確認してください


ドキュメントは、「*」は「指定されたサーバー上のすべてのセッションにメッセージを送信する」と言います。ターミナルサービスまたはユーザーの簡易切り替えでブレークします
家禽

2
あなたが使用することができますmsg %SESSIONNAME% msg
Fowl

5
msg * /time:0 /w Hello everybody!

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


同じ答えが2009年以降存在します
jeb

おっと> _ <削除してください:)
MoE bis

?テキストに改行(空白行)を挿入する方法
ZEE

3
msg * /time:0 /w <C:\Somewhere\Message.txtファイル内の通常のテキスト(CrLfを含む)。
MoE bis 2016

4

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

ただし、プロンプトを表示するコンソールウィンドウを開くことはできますが、cmd.exeとフレンドのみを使用してGUIメッセージボックスを取得することはできません。


プロンプトはそれを行うかもしれません...あなたはそれについてもっとありますか?
billyy 2009

1
エコー "xx"、一時停止、または設定/ p var = promptはcmd.exeオプションです
Macke

@ nickl-:この方がいいですか?
マッケ

3

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


シマンテックのアンチウイルスによると、このアーカイブにはトロイの木馬が含まれています。
David

3
@David-アンチウイルスによって敵意のあるフラグが付けられたバッチファイルとテキストファイルがありました。実際、AVGアンチウイルスにコマンドラインの指示をキャッチさせ、それがウイルスであると主張しました。
James K

2
:FWIWウイルスの合計は51分の11のウイルスチェッカーは、そのファイルにウイルスを検出言うvirustotal.com/en/file/...
マシュー・ロック

3

Zenityを使用できます。Zenityでは、コマンドラインおよびシェルスクリプトでダイアログボックスを実行できます。さらに詳しい情報はウィキペディアにもあります。

これはクロスプラットフォームです:Windows用のWindowsインストーラーはここにあります


3

@Fowlの回答に続いて、以下を使用してタイムアウトを10秒間だけ表示するように改善できます。

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

詳細はこちらをご覧ください。


ウイルスxDとして検出
Julien

2

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

Rundll32.exe user32.dll、MessageBox(0、 "text"、 "titleText"、{最上位のメッセージボックスなどの追加フラグ})

私の電話からそれをタイプして、私を判断しないでください...そうでなければ、私は追加のフラグをリンクします。


rundll32.exe user32.dll,MessageBoxA Xファイル名を指定して実行ボックスで実行すると、タイトルがXのメッセージボックスを表示できます。Xをどのようにしても、複数のパラメーターとして解釈させることはできません。すべてがタイトルに含まれます。したがってrundll32.exe user32.dll,MessageBoxA (0, "MyTitle", "MyText", 0)、タイトルのメッセージ(0, "MyTitle", "MyText", 0) ボックスを表示しますが、コマンドラインからは実行できません-実行ボックスからのみ。コマンドラインでは、何もしません。コマンドラインから、バッチファイルから、または実行ボックスからのみ確実に機能しますか?
ジェリージェレミア2016年

ドキュメントごとのrundll32.exe は、「オプションの引数」の部分を解析する必要があるため、この目的のために特別に設計されたプロシージャのみを実行できます。MessageBoxっぽい機能はこのように設計されていません。なぜWin + R(実行ボックス)で動作するのか、それはまだ大きな問題です!
Yuriy Pozniak

1

msg * /server:127.0.0.1ここにメッセージを入力してください


Windows cmd.exeは言う: 'msg'は内部または外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されません。
Anthony Hatzopoulos 2012年

@AnthonyHatzopoulosこれは、XPでのみサポートされているためです
pattyd 2013

@pattyd XP以降、実際
Jesan Fafon 2014

@JesanFafonいいえ、それはXPの後に中止されました...私はあなたがXP 以前
パティド

@pattyd Windows 8.1ではをwhere msg返しますC:\Windows\System32\msg.exe。私はあなたが考えていると思いますnet send
Jesan Fafon

1

このアプリケーションは、バッチファイルを実行可能ファイルに変換(ラップ)すると、それを実行できます。


  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}

0

より良いオプション

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


説明:
lines= 行数、
cols= メッセージ内の1 文字、プラス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"


@ender_scytheコメントが機能します(start cmd /c "@echo off & mode con cols=18 lines=2 & echo My Popup Message & pause>nul")。あなたはしません。これは、メッセージをエコー表示が、返すウィンドウサイズ設定に失敗したThe screen cannot be set to the number of lines and columns specified.、少なくとも私のWindows 7で
cdlvcdlv

@cdlvcdlv回答を更新しました。誰にとっても機能するはずです。修正してください。
T.Todua

それは確かに動作します... x現在のディレクトリに名前の付いたファイルがないか、それを失ってもかまいません。
cdlvcdlv

あなたは完全に機能するコメントを取り、それを壊しました。次に、いくつかの値を追加しようとしました(許可します)が、そうではないというわけではない名前のファイルが失われるという代償があります。(好奇心から)誰かがあなたのコードにそのような不運を試してみると、ファイルは完全に失われます。さらに、という名前のフォルダーが存在する場合x、コマンドは失敗します。感謝せず、コードを修正してください。ワンライナーを使う必要すらありません。また、コードが優れていると思われる場合は、コードレビューに投稿してください。
cdlvcdlv

なんとお礼を言いたいのですが...私は決断しませんでしたが、更新、説明、さらには自動解決策までも提供していません... 幸運
T.Todua

0

ここに私がここと他の投稿で良い答えに基づいてまとめた私のバッチスクリプトがあります

タイトルのタイムアウトを設定し、スリープして、後者のためにスケジュールし、新しいラインのために\ nスケジュールすることができます

それを「popup.bat」と名付け、あなたのウィンドウズパスフォルダに入れて、あなたのPCでグローバルに動作するようにしてください。

たとえばpopup Line 1\nLine 2、2行のポップアップボックス(タイプpopup /?使用法の)

これがコードです

<!-- : Begin CMD
@echo off
cscript //nologo "%~f0?.wsf" %*
set pop.key=[%errorlevel%]
if %pop.key% == [-1] set pop.key=TimedOut
if %pop.key% == [1]  set pop.key=Ok
if %pop.key% == [2]  set pop.key=Cancel
if %pop.key% == [3]  set pop.key=Abort
if %pop.key% == [4]  set pop.key=Retry
if %pop.key% == [5]  set pop.key=Ignore
if %pop.key% == [6]  set pop.key=Yes
if %pop.key% == [7]  set pop.key=No
if %pop.key% == [10] set pop.key=TryAgain
if %pop.key% == [11] set pop.key=Continue
if %pop.key% == [99] set pop.key=NoWait
exit /b 
-- End CMD -->

<job><script language="VBScript">
'on error resume next
q   =""""
qsq =""" """
Set objArgs = WScript.Arguments
Set objShell= WScript.CreateObject("WScript.Shell")
Popup       =   0
Title       =   "Popup"
Timeout     =   0
Mode        =   0
Message     =   ""
Sleep       =   0
button      =   0
If objArgs.Count = 0 Then 
    Usage()
ElseIf objArgs(0) = "/?" or Lcase(objArgs(0)) = "-h" or Lcase(objArgs(0)) = "--help" Then 
    Usage()
End If
noWait = Not wait() 
For Each arg in objArgs
    If (Mid(arg,1,1) = "/") and (InStr(arg,":") <> 0) Then haveSwitch   =   True
Next
If not haveSwitch Then 
    Message=joinParam("woq")
Else
    For i = 0 To objArgs.Count-1 
        If IsSwitch(objArgs(i)) Then 
            S=split(objArgs(i) , ":" , 2)
                select case Lcase(S(0))
                    case "/m","/message"
                        Message=S(1)
                    case "/tt","/title"
                        Title=S(1)
                    case "/s","/sleep"
                        If IsNumeric(S(1)) Then Sleep=S(1)*1000
                    case "/t","/time"
                        If IsNumeric(S(1)) Then Timeout=S(1)
                    case "/b","/button"
                        select case S(1)
                            case "oc", "1"
                                button=1
                            case "ari","2"
                                button=2
                            case "ync","3"
                                button=3
                            case "yn", "4"
                                button=4
                            case "rc", "5"
                                button=5
                            case "ctc","6"
                                button=6
                            case Else
                                button=0
                        end select
                    case "/i","/icon"
                        select case S(1)
                            case "s","x","stop","16"
                                Mode=16
                            case "?","q","question","32"
                                Mode=32
                            case "!","w","warning","exclamation","48"
                                Mode=48
                            case "i","information","info","64"
                                Mode=64
                            case Else 
                                Mode=0
                        end select
                end select
        End If
    Next
End If
Message = Replace(Message,"/\n", "°"  )
Message = Replace(Message,"\n",vbCrLf)
Message = Replace(Message, "°" , "\n")
If noWait Then button=0

Wscript.Sleep(sleep)
Popup   = objShell.Popup(Message, Timeout, Title, button + Mode + vbSystemModal)
Wscript.Quit Popup

Function IsSwitch(Val)
    IsSwitch        = False
    If Mid(Val,1,1) = "/" Then
        For ii = 3 To 9 
            If Mid(Val,ii,1)    = ":" Then IsSwitch = True
        Next
    End If
End Function

Function joinParam(quotes)
    ReDim ArgArr(objArgs.Count-1)
    For i = 0 To objArgs.Count-1 
        If quotes = "wq" Then 
            ArgArr(i) = q & objArgs(i) & q 
        Else
            ArgArr(i) =     objArgs(i)
        End If
    Next
    joinParam = Join(ArgArr)
End Function

Function wait()
    wait=True
    If objArgs.Named.Exists("NewProcess") Then
        wait=False
        Exit Function
    ElseIf objArgs.Named.Exists("NW") or objArgs.Named.Exists("NoWait") Then
        objShell.Exec q & WScript.FullName & qsq & WScript.ScriptFullName & q & " /NewProcess: " & joinParam("wq") 
        WScript.Quit 99
    End If
End Function

Function Usage()
    Wscript.Echo _
                     vbCrLf&"Usage:" _
                    &vbCrLf&"      popup followed by your message. Example: ""popup First line\nescaped /\n\nSecond line"" " _
                    &vbCrLf&"      To triger a new line use ""\n"" within the msg string [to escape enter ""/"" before ""\n""]" _
                    &vbCrLf&"" _
                    &vbCrLf&"Advanced user" _
                    &vbCrLf&"      If any Switch is used then you must use the /m: switch for the message " _
                    &vbCrLf&"      No space allowed between the switch & the value " _
                    &vbCrLf&"      The switches are NOT case sensitive " _
                    &vbCrLf&"" _
                    &vbCrLf&"      popup [/m:""*""] [/t:*] [/tt:*] [/s:*] [/nw] [/i:*]" _
                    &vbCrLf&"" _
                    &vbCrLf&"      Switch       | value |Description" _
                    &vbCrLf&"      -----------------------------------------------------------------------" _
                    &vbCrLf&"      /m: /message:| ""1 2"" |if the message have spaces you need to quote it " _
                    &vbCrLf&"                   |       |" _
                    &vbCrLf&"      /t: /time:   | nn    |Duration of the popup for n seconds " _
                    &vbCrLf&"                   |       |<Default> untill key pressed" _
                    &vbCrLf&"                   |       |" _
                    &vbCrLf&"      /tt: /title: | ""A B"" |if the title have spaces you need to quote it " _
                    &vbCrLf&"                   |       | <Default> Popup" _
                    &vbCrLf&"                   |       |" _
                    &vbCrLf&"      /s: /sleep:  | nn    |schedule the popup after n seconds " _
                    &vbCrLf&"                   |       |" _
                    &vbCrLf&"      /nw /NoWait  |       |Continue script without the user pressing ok - " _
                    &vbCrLf&"                   |       | botton option will be defaulted to OK button " _
                    &vbCrLf&"                   |       |" _
                    &vbCrLf&"      /i: /icon:   | ?/q   |[question mark]"  _
                    &vbCrLf&"                   | !/w   |[exclamation (warning) mark]"  _
                    &vbCrLf&"                   | i/info|[information mark]"  _
                    &vbCrLf&"                   | x/stop|[stop\error mark]" _
                    &vbCrLf&"                   | n/none|<Default>" _
                    &vbCrLf&"                   |       |" _
                    &vbCrLf&"      /b: /button: | o     |[OK button] <Default>"  _
                    &vbCrLf&"                   | oc    |[OK and Cancel buttons]"  _
                    &vbCrLf&"                   | ari   |[Abort, Retry, and Ignore buttons]"  _
                    &vbCrLf&"                   | ync   |[Yes, No, and Cancel buttons]" _
                    &vbCrLf&"                   | yn    |[Yes and No buttons]" _
                    &vbCrLf&"                   | rc    |[Retry and Cancel buttons]" _
                    &vbCrLf&"                   | ctc   |[Cancel and Try Again and Continue buttons]" _
                    &vbCrLf&"      --->         | --->  |The output will be saved in variable ""pop.key""" _
                    &vbCrLf&"" _
                    &vbCrLf&"Example:" _
                    &vbCrLf&"        popup /tt:""My MessageBox"" /t:5 /m:""Line 1\nLine 2\n/\n\nLine 4""" _
                    &vbCrLf&"" _
                    &vbCrLf&"                     v1.9 By RDR @ 2020"
    Wscript.Quit
End Function

</script></job>

-3

VM内でポップアップする必要があるだけなので、技術的には次のようなコードが必要です。

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

(%machine_type%== virtual_machine)== trueの場合、インストールは続行されないため、反対票を投じます
アニオン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.