Есть ли способ отображения окна сообщения из пакетного файла (аналогично тому, как xmessage
может использоваться из bash -cripts в Linux)?
Показать всплывающее окно/сообщение из командного файла Windows
Ответ 1
Я бы сделал очень простой файл VBScript и вызвал его с помощью CScript для анализа параметров командной строки.
Что-то вроде следующего в MessageBox.vbs
:
Set objArgs = WScript.Arguments
messageText = objArgs(0)
MsgBox messageText
Которое вы бы назвали следующим:
cscript MessageBox.vbs "This will be shown in a popup."
MsgBox
ссылка, если вы заинтересованы в этом маршруте.
Ответ 2
Прежде всего, DOS не имеет к этому никакого отношения, возможно, вам понадобится решение командной строки Windows (опять же: нет DOS, чистая Windows, просто не окно, а консоль).
Вы можете использовать метод VBScript, предоставленный boflynn, или вы можете неправильно использовать net send
или msg
. net send
работает только в старых версиях окон:
net send localhost Some message to display
Это также зависит от службы Messenger для запуска.
Для более новых версий (XP и далее, по-видимому):
msg "%username%" Some message to display
Следует отметить, что поле сообщения, отправленное с помощью msg.exe
, будет длиться только 60 секунд. Однако это можно переопределить с помощью переключателя /time:xx
.
Ответ 3
Может показаться небольшая вспышка, но никаких временных файлов не требуется. Должен работать весь путь назад в какой-то момент (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^(^);
)
Ответ 4
Появится следующее окно командной строки:
START CMD /C "ECHO My Popup Message && PAUSE"
Ответ 5
Попробуйте:
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
Затем вы создаете новый документ Notepad, введите
<script type="text/vbscript">
MsgBox "your text here"
</script>
Затем вы сохранили бы это как .vbs файл (поместив ".vbs" в конец имени файла), сохраните как "Все файлы" в раскрывающемся списке под именем файла (поэтому он не сохраняет как .txt), затем нажмите "Сохранить".
Ответ 6
Таким образом, ваш командный файл создаст VBS script и покажет всплывающее окно. После запуска командный файл удалит этот промежуточный файл.
Преимущество использования MSGBOX в том, что оно действительно настраивается (изменить название, значок и т.д.), в то время как MSG.exe не так много.
echo MSGBOX "YOUR MESSAGE" > %temp%\TEMPmessage.vbs
call %temp%\TEMPmessage.vbs
del %temp%\TEMPmessage.vbs /f /q
Ответ 7
Мало других способов.
1) Geekiest и hackiest - он использует IEXPRESS для создания небольшого exe, который создаст всплывающее окно с помощью одной кнопки (он может создавать еще два типа всплывающих сообщений). Работает над КАЖДЫМИ окнами от 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
. Также работает на всех машинах Windows с XP и выше (несмотря на то, что 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
). Он снова использует JavaScript, несмотря на запрос OP, но поскольку он является летучей мышью, его можно назвать файлом 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) и один гибрид 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, который создает всплывающее окно (может быть вызван из командной строки или из пакета, если установлена PowerShell):
powershell [Reflection.Assembly]::LoadWithPartialName("""System.Windows.Forms""");[Windows.Forms.MessageBox]::show("""Hello World""", """My PopUp Message Box""")
6) И подход дбэнам здесь
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
Ответ 8
echo X=MsgBox("Message Description",0+16,"Title") >msg.vbs
- вы можете записывать любые цифры из 0,1,2,3,4 вместо 0 (перед символом "+" ), и вот значение каждого числа:
0 = Ok Button
1 = Ok/Cancel Button
2 = Abort/Retry/Ignore button
3 = Yes/No/Cancel
4 = Yes/No
- вы можете записывать любые числа из 16, 32, 48, 64 вместо 16 (после символа "+" ), а вот значение каждого числа:
16 – Critical Icon
32 – Warning Icon
48 – Warning Message Icon
64 – Information Icon
Ответ 9
Вот вариант PowerShell, который не требует загрузки сборок перед созданием окна, однако он работает заметно медленнее (~ +50%), чем команда PowerShell MessageBox, размещенная здесь @npocmaka:
powershell (New-Object -ComObject Wscript.Shell).Popup("""Operation Completed""",0,"""Done""",0x0)
Вы можете изменить последний параметр с "0x0" на значение ниже для отображения значков в диалоговом окне (см. " Метод всплывающих окон" для дальнейшего использования):
0x10 Стоп
0x20 Вопросительный знак
0x30 восклицательный знак
0x40 информационная марка
Адаптировано из статьи Microsoft TechNet PowerTip: используйте PowerShell для отображения всплывающего окна.
Ответ 10
Msg * "введите ваше сообщение здесь
отлично работает, просто сохраните файл .bat в блокноте или убедитесь, что формат установлен на "все файлы"
Ответ 11
Для этого вам нужно иметь небольшую программу, которая отображает сообщение и запускает его из вашего пакетного файла.
Вы можете открыть консольное окно, которое отображает подсказку, но получение сообщения с графическим интерфейсом с использованием cmd.exe и друзей невозможно, AFAIK.
Ответ 12
Я использую утилиту msgbox.exe отсюда: http://www.paulsadowski.com/WSH/cmdprogs.htm
Ответ 13
Вы можете использовать Zenity. Zenity позволяет выполнять диалоговые окна в сценариях командной строки и оболочки. Более подробную информацию можно найти на Wikipedia.
Это кросс-платформенный: установщик Windows для Windows можно найти здесь.
Ответ 14
msg * /time:0 /w Hello everybody!
Это сообщение ожидает навсегда до тех пор, пока не будет нажата кнопка ОК (она по умолчанию остается только одна минута) и отлично работает в Windows 8.1
Ответ 15
Вы можете вызвать функцию dll из user32.dll, я думаю Что-то вроде
Rundll32.exe user32.dll, MessageBox (0, "текст", "titleText", {дополнительные флаги для самого верхнего окна сообщений e.t.c})
Вводя его с моего телефона, не судите меня... иначе я бы связал лишние флаги.
Ответ 16
Следуя ответу @Fowl, вы можете улучшить его с тайм-аутом, чтобы появляться только в течение 10 секунд, используя следующее:
mshta "javascript:var sh=new ActiveXObject( 'WScript.Shell' ); sh.Popup( 'Message!', 10, 'Title!', 64 );close()"
Подробнее см. здесь.
Ответ 17
msg */server:127.0.0.1 Введите ваше сообщение здесь
Ответ 18
Это приложение может сделать это, если вы конвертируете (обертываете) свои командные файлы в исполняемые файлы.
-
Простой Messagebox
%extd% /messagebox Title Text
-
Сообщение об ошибке
%extd% /messagebox Error "Error message" 16
-
Отменить попытку снова Messagebox
%extd% /messagebox Title "Try again or Cancel" 5
4) "Никогда не спрашивайте меня снова" Messagebox
%extd% /messageboxcheck Title Message 0 {73E8105A-7AD2-4335-B694-94F837A38E79}
Ответ 19
Лучший вариант
set my_message=Hello world
&& start cmd/c "@echo off & mode con cols=15 lines=2 & echo %my_message% & pause>nul"
Описание: lines=
количество строк, плюс 1 cols=
количество символов в сообщении, плюс 3 (однако минимум должен быть равен 15
)
Auto- 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"
Ответ 20
ему нужно ТОЛЬКО для всплывания, когда внутри vm, так технически, должен быть какой-то код вроде:
if %machine_type% == virtual_machine then
echo message box code
else
continue normal installation code