9

Я хотел бы отобразить сообщение для пользователя с помощью CMD. Я знаю, как это сделать, создав файл .vbs (VBScript) и выполнив его из CMD следующим образом:

(echo MsgBox "Line 1" ^& vbCrLf ^& "Line 2",262192, "Title")> File.vbs

start File.vbs

Но я хочу отобразить сообщение, не создавая никакого файла, прямо из CMD. Может быть, с помощью команды для запуска VBScripts прямо из CMD.

4 ответа4

8

Как подсказывает @wysiwyg, в версиях Windows для Pro/Business * вы ищете команду Msg . Он доступен во всех современных версиях Windows (по крайней мере, в XP). Чтобы отобразить сообщение вошедшему в систему пользователю, выполните следующее:

msg %username% Your message here

Результат выглядит так:

Одним из соображений, связанных с этой командой, является то, что вы не можете настроить текст заголовка.

Вы можете узнать больше о Msg на TechNet.


* Если вам нужно решение, которое работает во всех выпусках Windows, включая Home, на мой взгляд, метод VBScript, о котором вы уже знаете, является самым простым решением этой проблемы. Он работает на всех современных версиях и выпусках Windows в конфигурации по умолчанию и прост в использовании.

4

Как уже говорили другие, нет способа сделать это чисто с помощью cmd, но, хотя это и есть название вопроса, мне кажется, что часть без файла важнее для вас, и при определенных обстоятельствах это может быть возможно.

С PowerShell должно быть возможно запустить код без любого файла, как это:

PowerShell -Command "Add-Type -AssemblyName PresentationFramew
ork;[System.Windows.MessageBox]::Show('Hello World')"

VBS не разрешает прямое выполнение кода через cscript или wscript, но mshta разрешает. Вы можете использовать его следующим образом (если вам нужно несколько строк, используйте «:» в качестве разделителя):

mshta vbscript:Execute("msgbox ""Hello World"":close")

Так как он базируется, то есть на него могут повлиять некоторые ограничения gpo, поэтому, если у вас есть выбор, то PowerShell, вероятно, является более безопасной ставкой.

2

Мне нужно что-то подобное сегодня. Так как я не смог найти решение для внешних зависимостей, которое мне понравилось, так как я на самом деле не фанат VBScript/Powershell, я решил написать следующее:

https://github.com/cubiclesoft/messagebox-windows

Окна сообщений, которые он создает, являются модальными для текущего окна консоли. То есть пользователь не может ничего сделать, пока не закроет диалог. Кроме того, код возврата из вызова MessageBox() возвращается вызывающей стороне, чтобы скрипт мог реагировать на нажатие любой кнопки. И, конечно же, он поддерживает полный набор параметров Win32 API MessageBox() .

Добавление исполняемого файла размером 80 КБ может не быть чашей чая для всех. Тем не менее, он статически связан с средой выполнения VC++ и поддерживает Unicode, что объясняет, почему файл такой большой, учитывая минималистический характер его работы. Кроме того, существует небольшая проблема, заключающаяся в невозможности простого перехода на новые строки из командной строки для отображения многострочных сообщений. С другой стороны, он отображает диалог за меньшее время, чем любое другое решение, представленное до сих пор.

Конечно, если размер файла не имеет значения, а диалоги создают слишком "пользовательский" интерфейс и / или не требуют взаимодействия с пользователем, я также столкнулся с этим изящным проектом:

https://www.paralint.com/projects/notifu/

Который отображает всплывающую подсказку в области уведомлений о состоянии экрана, используя IUserNotification. Недостатком является то, что исполняемый файл Notifu работает всего лишь 240 КБ. Еще один прискорбный пример того, что COM создает ненужное раздувание и оставляет желать, чтобы был простой и легкий API для этой функции.

Для чего-то кроссплатформенного, есть zenity. Это в основном для Linux, но также есть порты Mac и Windows. Размер Windows-порта zenity превышает 1 МБ, потому что GTK довольно раздутый.

0

У меня есть способ сделать это с помощью cmd, но он в основном включает в себя файл, но файл удаляется сразу после выполнения VBS. Так что на самом деле это не так. Ты можешь сделать :

echo x=msgbox("Hey! Here is a message!",Type+Icon+Action,"Hey! Here is a title!") > %tmp%\tmp.vbs
cscript //nologo %tmp%\tmp.vbs
del %tmp%\tmp.vbs

Type+Icon+Action - это просто основные VBS, для справки, здесь. https://therevisionist.org/wp-content/uploads/2016/03/vbscript_msgbox_chart-e1458059002411.jpg?x47750 Код, который я показал вам, создает файл с кодом VBS, затем он исполняется с использованием cscript, затем удаляет файл после его выполнения, чтобы он выглядел так, как будто его вызвал запрос cmd. Чтобы это выглядело так, просто используйте @echo off. Надеюсь, это помогло!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .