web-dev-qa-db-ja.com

バッチスクリプトでポップアップメッセージを作成するにはどうすればよいですか?

VBScriptまたはKiXtartまたはその他の外部スクリプト/プログラミング言語を使用して、バッチスクリプトwithoutでポップアップメッセージを作成する方法を知る必要があります。これについては全く手がかりがありません...出発点すらありませんでした。 NET SENDを認識していますが、現在の環境ではメッセンジャーサービスが無効になっています。

34
Gutsygibbon

LittleBobbyTableの回答に関して-NET SENDはVistaまたはWindows 7では機能しません。MSG.EXEに置き換えられました

Windowsのすべてのバージョンで動作する粗雑なソリューションがあります。キーを押すと閉じる新しいcmd.exeウィンドウを開始することにより、粗雑なポップアップメッセージを送信できます。

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

メッセージボックスが閉じられるまでスクリプトを一時停止する場合は、/ WAITオプションを追加できます。

start "" /wait cmd /c "echo Hello world!&echo(&pause"
36
dbenham
msg * "Enter Your Message"

これは役立ちますか?

48
shredder

次のようなCSCRIPT.EXEまたはWSCRIPT.EXE(Windows 95以降、Windowsのすべてのバージョンに存在していた)を活用できます。

echo msgbox "Hey! Here is a message!" > %tmp%\tmp.vbs
cscript /nologo %tmp%\tmp.vbs
del %tmp%\tmp.vbs

または

echo msgbox "Hey! Here is a message!" > %tmp%\tmp.vbs
wscript %tmp%\tmp.vbs
del %tmp%\tmp.vbs

よりカスタマイズ可能なPopUpコマンドを選択することもできます。この例では、タイムアウトする前に[OK]をクリックする10秒のウィンドウが表示されます。

echo set WshShell = WScript.CreateObject("WScript.Shell") > %tmp%\tmp.vbs
echo WScript.Quit (WshShell.Popup( "You have 10 seconds to Click 'OK'." ,10 ,"Click OK", 0)) >> %tmp%\tmp.vbs
cscript /nologo %tmp%\tmp.vbs
if %errorlevel%==1 (
  echo You Clicked OK
) else (
  echo The Message timed out.
)
del %tmp%\tmp.vbs

上記のコンテキストでは、cscriptwscriptの両方が同じように動作します。バッチファイルから呼び出された場合、ボットcscriptおよびwscriptは、スクリプトが完了するまでバッチファイルを一時停止し、ファイルの続行を許可します。

コマンドプロンプトから手動で呼び出された場合、cscriptは終了するまでコマンドプロンプトに制御を戻しませんが、wscriptはスクリプトの実行用に別のスレッドを作成し、コマンドプロンプトに制御を戻します。スクリプトが完了する前でも。

このスレッドで説明されている他のメソッドは、メッセージがクリックされるのを待つ間、バッチファイルの実行を一時停止させません。あなたの選択はあなたのニーズによって決まります。

注:この方法を使用すると、さまざまなyes/no/cancel/abortをカバーするために複数のボタンとアイコンの構成を使用できます/ retryユーザーへのクエリ: https://technet.Microsoft.com/en-us/library/ee156593.aspx

enter image description here

21
James K

いくつかの方法(すべて[msg.exe]と異なり、スクリプトはボタンが押されるのを待ちます)。

1)最も元気でハッキング-IEXPRESSを使用して、1つのボタンでポップアップを作成する小さなexeを作成します( 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は「外部」言語を必要としないにもかかわらず、ここのjsvascriptは最小化されます)。.batとして保存する必要があります。

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

alert("Hello, world!");

または1行で:

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として保存する必要があります)。それは心配することなくバットファイルとして呼び出すことができるバットです. POPUP を使用し、より多くの人口よりも少し多くの制御を可能にします MSGBOX 。It 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="timedout";
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)msgソリューションは既に答えとして投稿されていますが、ここではより良い使用方法があります:

msg * /self /w "hello world"

/selfは、現在のユーザーにのみメッセージを送信するように強制する文書化されていないスイッチです。

16
npocmaka

msg * Hello world

私のために働く。

5
user3176371

メッセージを作成するのは簡単です。その方法は次のとおりです。

最初にメモ帳を開き、次を入力します。

msg "Message",0,"Title"

それをMessage.vbsとして保存します。

バッチファイルタイプで次のようになります。

Message.vbs %*
0
Lord C
@echo off
title message

echo what's the password?
set/p "pass=>"

if not %pass% == password goto fail
msg *correct: Correct password!!!
goto end

:fail
msg *wrong: Wrong password!!!

:end
0
Ruan

msg * message goes here

その方法は非常にシンプルで簡単であり、私は信じているどのバッチファイルでも動作するはずです。このメソッドの唯一の「欠点」は、一度に1つのメッセージしか表示できないことです。複数のメッセージがある場合は、コード内での順序に応じて次々に表示されます。また、バッチファイルに別のループ演算子または連続演算子があることを確認してください。そうしないと、バッチファイルが自動的に閉じて、このメッセージのみが表示されます。 「静かな」バックグラウンドループオペレータが必要な場合は、次のとおりです。

pause >nul

それはそれを実行し続けるはずですが、ボタンが押された後に閉じます。

また、実行時にすべてのコマンドを「静か」に保ち、ファイルに入力されたことを表示して表示しないようにするには、バッチファイルの先頭に次の行を追加します。

@echo off

これらすべてのヒントがお役に立てば幸いです!

0
Cubit-Games

Rob van der Woudeのサイト で文書化されているNET SENDを使用するのが最善の策です。

それ以外の場合は、外部スクリプトプログラムを使用する必要があります。バッチファイルは、ECHOを介してメッセージを送信するためのものです。

0

これは非常に単純なため、これを行うためのコードを数行作成しました

そのため、変数をmsgとして設定し、このコードを使用します。 VBSメッセージボックスにポップアップ表示されます。

コード:

@echo off
echo %msg% >vbs.txt
copy vbs.txt vbs.vbs
del vbs.txt
start vbs.vbs
timeout /t 1
del vbs.vbs
cls

これは私が思いついたものであり、ほとんどのメッセージのニーズに対応するはずです。また、一部のバッチスクリプトとは異なり、Spacesでも機能します。

0
user3674709