CMDを使ってユーザーにメッセージを表示させたいと思っています。 私が知っている方法は、.vbs(VBScript)ファイルを作成し、CMDから以下のように実行することです。
(echo MsgBox "Line 1" ^& vbCrLf ^& "Line 2",262192, "Title")> File.vbs
start File.vbs
しかし、私がやりたいことは、ファイルを作成せずに、直接CMDからメッセージを表示することです。たぶん、CMDから直接VBSスクリプトを実行するコマンドを使えばいいと思います。
WindowsのPro/Businessバージョン*では、@wysiwygさんが提案されたように、Msg
コマンドが必要です。 これはWindowsのすべての最新バージョン(少なくともXPまで)で利用できます。現在ログオンしているユーザーにメッセージを表示するには、次のように実行します。
msg %username% Your message here
このコマンドの注意点は、タイトルバーのテキストをカスタマイズできないことです。
Msgについては、TechNetで詳しく説明しています。
*もしあなたがHomeを含むWindowsの全エディションで動作するソリューションを必要としているのであれば、私の意見では、あなたがすでに知っているVBScriptの方法がこの問題に対する最もシンプルなソリューションです。この方法は、最近のすべてのWindowsのバージョンとエディションで、デフォルトの設定で動作しますし、使い方も簡単です。
他の方もおっしゃっているように、純粋にcmdで行う方法はありませんが、質問のタイトルにもなっていますが、without fileの部分がより重要であると思われますので、特定の状況下であれば可能かもしれません。
powershellを使えば、このようにファイルなしでコードを実行することができるはずです。
PowerShell -Command "Add-Type -AssemblyName PresentationFramework;[System.Windows.MessageBox]::Show('Hello World')"
VBSではcscriptやwscriptでコードを直接実行することはできませんが、mshtaでは可能です。以下のように使用できます(複数行が必要な場合は ':' をデリミタとして使用してください)。
mshta vbscript:Execute("msgbox ""Hello World"":close")
これはieベースなので、gpoの制限に影響されるかもしれませんので、もし選択できるのであれば、powershellの方が安全でしょう。
今日、これと似たようなことが必要になりました。 私はVBScript/Powershellがあまり好きではないので、気に入った外部依存のソリューションを見つけることができなかったので、先にそれを書いてみました。
https://github.com/cubiclesoft/messagebox-windows
このプログラムが生成するメッセージボックスは、現在のコンソールウィンドウに対して modal です。 つまり、ユーザーはダイアログを閉じるまで何もできないのです。 また、MessageBox()
の呼び出しからのリターンコードが呼び出し元に返されるので、どのボタンが押されたかに応じてスクリプトが反応することができます。 もちろん、Win32 APIのMessageBox()
のオプションもすべてサポートしています。
80KBの実行ファイルを追加することは、誰もが納得するものではないかもしれません。 しかし、VC++ランタイムと静的にリンクされており、Unicodeをサポートしているので、機能が最小限であるにもかかわらず、ファイルがこれほど大きくなってしまったのは説明がつきます。 また、複数行のメッセージを表示するために、コマンドラインから簡単に改行を渡すことができないという些細な問題があります。 ちょっとした利点としては、これまでに紹介した他のどのソリューションよりも短い時間でダイアログを表示できることです。
もちろん、ファイルサイズが問題ではなく、ダイアログがあまりにも「顔に出る」ユーザーエクスペリエンスを生み出す場合や、ユーザーのインタラクションを必要としない場合には、このような気の利いたプロジェクトにも遭遇しました。
https://www.paralint.com/projects/notifu/
IUserNotification](https://docs.microsoft.com/en-us/windows/desktop/api/shobjidl_core/nn-shobjidl_core-iusernotification)を使って、画面のステータス通知領域にポップアップバルーンを表示しています。 欠点は、Notifuの実行ファイルが240KBに満たないことです。 COMが不必要な肥大化をもたらすもう一つの不幸な例であり、この機能のためのシンプルで軽量なAPIがあればと願っています。
クロスプラットフォームのものとしては、zenityがあります。 ほとんどがLinux用ですが、MacやWindowsにも対応しています。 zenityのWindows版は1MBを超えるサイズですが、これはGTKがかなり肥大化しているためです。