我想使用 CMD 向用户显示一条消息。我知道的方法是创建一个 .vbs (VBScript) 文件并从 CMD 执行它,如下所示:
(echo MsgBox "Line 1" ^& vbCrLf ^& "Line 2",262192, "Title")> File.vbs
start File.vbs
但我想要做的是直接从 CMD 显示消息而不创建任何文件。也许可以通过使用命令直接从 CMD 运行 VBScript 来实现。
答案1
正如其他人所说,没有办法仅使用 cmd 来执行此操作,但尽管这是问题的标题,但在我看来,该部分无文件对您来说更重要,并且在某些情况下这可能是可能的。
使用 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 可能是更安全的选择
答案2
正如 @wysiwyg 所建议的,在 Windows 的 Pro/Business 版本*上,您正在寻找该Msg
命令。它在所有现代版本的 Windows 中都可用(至少最早到 XP)。要向当前登录的用户显示一条消息,请运行以下命令:
msg %username% Your message here
此命令的一个注意事项是您不能自定义标题栏文本。
您可以了解有关 Msg 的更多信息在 TechNet 上。
*如果您需要一个有效的解决方案全部Windows 版本,包括主页在我看来,您已经知道的 VBScript 方法是解决此问题最简单的方法。它适用于所有现代版本的 Windows 及其默认配置,并且易于使用。
答案3
我今天需要类似的东西。由于我不太喜欢 VBScript/Powershell,所以我找不到我喜欢的外部依赖解决方案,所以我继续写了一个:
https://github.com/cubiclesoft/messagebox-windows
它生成的消息框是情态动词到当前控制台窗口。也就是说,用户在关闭对话框之前无法执行任何操作。此外,调用的返回代码MessageBox()
将返回给调用者,以便脚本可以对按下的任何按钮做出反应。当然,它支持MessageBox()
Win32 API 的所有选项。
向其中添加一个 80KB 的可执行文件可能不是每个人都喜欢的。不过,它是静态链接到 VC++ 运行时的,并且支持 Unicode,这解释了为什么文件如此之大,因为它的功能非常简约。还有一个小问题,就是无法轻松地从命令行传入换行符来显示多行消息。小小好处是,它显示对话框所需的时间比迄今为止提出的任何其他解决方案都要短。
当然,如果文件大小不重要,并且对话框创建了太“直观”的用户体验和/或不需要用户交互,我也会遇到这个漂亮的项目:
https://www.paralint.com/projects/notifu/
在屏幕的状态通知区域显示一个弹出气球用户通知缺点是 Notifu 可执行文件运行时大小接近 240KB。另一个不幸的例子是 COM 会产生不必要的臃肿,这让我希望有一个简单、轻量级的 API 来实现该功能。
想要跨平台的话,可以考虑 zenity。它主要适用于 Linux,但也有 Mac 和 Windows 版本。zenity 的 Windows 版本大小超过 1MB,因为 GTK 太臃肿了。
答案4
此外,外部(非原生 Windows)可执行文件, 有
nircmd infobox "msg" "title"
如果您可以使用 VB6 编译器,那么这一行代码可以生成一个 5.5k 的可执行文件:
sub main
msgbox command
end sub