Покажіть спливаюче вікно / вікно повідомлення з пакетного файлу Windows


153

Чи існує спосіб відображення вікна повідомлення з пакетного файлу (подібно до того, як xmessageможна використовувати bash-скрипти в Linux)?


CMD.EXE, це 32-розрядний командний процесор, який підтримує команди DOS.
Алан Б

7
Це називається командний рядок Windows.
Рікардо Поло Джарамільо

Відповіді:


121

Я б створив дуже простий файл VBScript і назвав би його за допомогою CScript для розбору параметрів командного рядка.

Щось таке, як збережено в MessageBox.vbs:

Set objArgs = WScript.Arguments
messageText = objArgs(0)
MsgBox messageText

Ви б назвали:

cscript MessageBox.vbs "This will be shown in a popup."

MsgBoxдовідка, якщо вам цікаво пройти цей маршрут.


спасибі, що це зробить, недобре створити файл, записати в нього ці дані, і чим користуватися ним, ніж видаляти. повинен працювати нормально :)
billyy

1
Чудова відповідь. Таким чином ви можете мати повний контроль над іконками, кнопками та заголовком поля. Також, коли ви зберігаєте файл десь уздовж PATH, ви викликаєте його з будь-якого місця. Я створив кілька файлів для сповіщень з різними значками.
Deus777

Приємно. До речі, вам не потрібно використовувати CScript, принаймні, в Win10. За допомогою CScript я отримую деякий додатковий текст у командному рядку. Без CScript є лише попередження, що чудово
Дитина Божа

У мене не було cscript. Я замість цього використовував старт.
sureshvv

127

Перш за все, DOS не має до цього нічого спільного, ви, мабуть, хочете рішення командного рядка Windows (знову ж таки: немає DOS, чистий Windows, просто не вікно, а консоль).

Ви можете використовувати метод VBScript, наданий boflynn, або можете неправильно використовувати net sendабо msg. net sendпрацює лише на старих версіях Windows:

net send localhost Some message to display

Це також залежить від запущеної служби Messenger.

Для нових версій (XP і далі), мабуть):

msg "%username%" Some message to display

Слід зазначити, що вікно повідомлень, надіслане за допомогою, msg.exeтриватиме лише 60 секунд. Це , однак , може бути перевизначені з /time:xxперемикачем.


2
Ви можете використовувати змінні env, щоб отримати локального користувача -% USERNAME%. msg.exe є на моєму домашньому апараті XP, але я чув анекдотичні записи, які є не у кожній версії Vista. Я вважаю, що послуга NET SEND відключена в наші дні.
McDowell

Правильно, дякую, забув envvar (рідко використовую що-небудь, крім% UserProfile% та мої власні визначені партії :)). Хоча смішно, ви маєте рацію щодо послуги Messenger. Він навіть не існує в моєму XP VM, але чисте надсилання все ще існує. msg.exe працює, хоча.
Джої

18
Я подумав, що відповіді відсутній у життєздатному варіанті і надав це. Тут нічого поганого. Ні тобі не потрібно відчувати себе змушеним щось робити, ні я якось кажу, що бофлін неправильно. Я просто додав ще один варіант, який повинен бути ідеально підходить для запитань, на які немає однозначної відповіді. Крім того, ви, мабуть, не єдиний, хто має це питання, а інші, можливо, не захочуть використовувати VBScript з будь-яких причин. Це веб-сайт спільноти, не лише ваш :-)
Joey

8
Я для себе щойно використав це для нерестування повідомлення "Я люблю тебе" на ПК своєї подруги з віддаленої оболонки.
Каміло Мартін

1
В Windows 8 і 10 я знайшов версію Windows. Для мене це працює на профі, але не вдома. Інші повідомили, що він працює на Home Premium і Enterprise, Ultimate тощо. Здається, звичайний старий дім не отримує його (він не існує в System32, але його можна додати).
шокс

84

Може відобразити трохи спалаху, але тимчасові файли не потрібні. Має працювати весь шлях назад, десь в епоху IE5 (IIRC).

mshta javascript:alert("Message\n\nMultiple\nLines\ntoo!");close();

Не забувайте уникати своїх круглих дужок, якщо ви використовуєте if:

if 1 == 1 (
   mshta javascript:alert^("1 is equal to 1, amazing."^);close^(^);
)

Це відмінно працює з командного рядка, але коли я вставити його в пакетний файл, я отримую цю помилку: close() was unexpected at this time.
eye_mew

@eye_mew, можливо, вам потрібно буде видалити ці ^знаки втечі у файлі bat
phuclv

1
Для мене це прекрасно працювало з пакетного файлу (я в Windows 7) Чи можемо ми запустити будь-який Javascript таким чином? Як ми повернемо значення в пакетний файл?
Джеррі Єремія

1
Ось кілька дивовижних прикладів того, що ви можете зробити: dostips.com/forum/viewtopic.php?t=5311 Приклад LocalDateTime повертає значення. Дякую за ідею!
Джеррі Єремія

Прохолодний node.js від Microsoft до того, як JavaScript на сервері був крутим - пропущена можливість для них.
Данило Соколовський

76

Це з'явиться ще одне вікно командного рядка:

START CMD /C "ECHO My Popup Message && PAUSE"

1
дивовижний ти! я можу використовувати це в кількох інших сценаріях :)
billyy

3
Кращим варіантом буде: start cmd /c "@echo off & mode con cols=18 lines=2 & echo My Popup Message & pause>nul"змінити cols=18кількість символів у повідомленні + 2. І lines=2рівнозначна кількість рядків + 1.
ender_scythe

1
позбудьтесь ПАУЗИ та використовуйтеcmd /k
Artelius

34

Спробуйте:

Msg * "insert your message here" 

Якщо ви використовуєте command.com's Windows XP, це відкриє вікно повідомлень.

Відкриття нового вікна cmd - це не зовсім те, про що ви просили, я збираюся. Ви також можете використовувати VBScript і використовувати це у файлі .bat. Ви відкриєте його з файлу bat з цією командою:

cd C:\"location of vbscript"

Це означає, що змінити каталог command.com буде шукати файли, а потім у наступному рядку:

"insert name of your vbscript here".vbs

Потім ви створюєте новий документ Блокнота , введіть

<script type="text/vbscript">
    MsgBox "your text here"
</script>

Потім ви збережете це у форматі .vbs (поставивши ".vbs" в кінці імені файлу), збережіть як "Усі файли" у спадному вікні під назвою файлу (щоб він не зберігався як .txt ), а потім натисніть кнопку Зберегти!


3
Вам не потрібен <script/>тег.
surfasb

? як вставити новий рядок (порожні рядки) в текст при використанні -> MSG * <текст>
ZEE

@ZEE Якщо ви користуєтесь лише msg *вам, вам буде запропоновано ввести повідомлення, а потім ctrl-Z. Ви можете ввести тут розриви рядків, які з’являться у вашому повідомленні.
Користувач5910,

30

Трохи більше способів.

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 і вище (незважаючи на те, що ОП не хочуть "зовнішніх" мов, 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, його можна без проблем турбувати як 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) і в кінці один єдиний виклик до shellhell, який створює спливаюче вікно (можна викликати з командного рядка або з пакетного пакету, якщо встановлено powerhell):

powershell [Reflection.Assembly]::LoadWithPartialName("""System.Windows.Forms""");[Windows.Forms.MessageBox]::show("""Hello World""", """My PopUp Message Box""")

6) І підхід dbenham, що спостерігається тут

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

29

Таким чином ваш пакетний файл створить сценарій VBS і покаже спливаюче вікно. Після запуску пакетний файл видалить цей проміжний файл.

Перевага використання MSGBOX полягає в тому, що він дійсно зберігається (змінити заголовок, піктограму тощо), тоді як MSG.exe не так вже й багато.

echo MSGBOX "YOUR MESSAGE" > %temp%\TEMPmessage.vbs
call %temp%\TEMPmessage.vbs
del %temp%\TEMPmessage.vbs /f /q

15

Ось варіант 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
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  

2
Як ви отримуєте відповідь зі сценарію VB?
Suit Boy Apps

7

Msgstr "" вставити своє повідомлення сюди "

добре працює, просто збережіть як .bat файл у блокноті або переконайтесь, що для формату встановлено значення "всі файли"


Документи кажуть, що "*" буде "Надіслати повідомлення всім сеансам на вказаному сервері", тобто. порушить термінальні послуги або швидку комутацію користувачів
Fowl

2
ви могли використовуватиmsg %SESSIONNAME% msg
Fowl

5
msg * /time:0 /w Hello everybody!

Це повідомлення чекає вічно, поки не буде натиснути кнопку ОК (воно за замовчуванням триває лише одну хвилину) і справно працює в Windows 8.1


Таку ж відповідь присутній з 2009 року
Джеб

На жаль> _ <Будь ласка, видаліть його :)
МО біс

"як вставити новий текст (порожні рядки) в текст
ZEE

3
msg * /time:0 /w <C:\Somewhere\Message.txtде у файлі є звичайний текст (містить тексти CrLf).
МО біс

4

Для цього вам потрібно мати невелику програму, яка відображає скриньку повідомлень і запускає це з вашого пакетного файлу.

Ви можете відкрити вікно консолі, яке відображає підказку, але отримати вікно повідомлення GUI за допомогою cmd.exe та лише друзів неможливо, AFAIK.


підказка може зробити це ... у вас є більше про це?
billyy

1
echo "xx", пауза або set / p var = prompt - це варіанти cmd.exe
Macke

@ nickl-: краще так?
Макке

3

Я використовую тут утиліту з іменем msgbox.exe: http://www.paulsadowski.com/WSH/cmdprogs.htm


За даними антивірусу Symantec, цей архів містить троян.
Девід

3
@David - У мене були антивірусні пакети та текстові файли, позначені як ворожі. Насправді я мав антивірус AVG вловлювати інструкцію командного рядка і стверджувати, що це вірус.
Джеймс К

2
FWIW Virus Total каже, що перевіряючі віруси 11/51 виявляють віруси у цьому файлі: virustotal.com/en/file/…
Меттью Блок

3

Ви можете використовувати Zenity . Zenity дозволяє виконувати діалогові вікна в командному рядку та скриптах оболонки. Більше інформації можна знайти також у Вікіпедії .

Це кросплатформна програма: інсталятор Windows для Windows можна знайти тут .


3

Після відповіді на @ Fowl, ви можете покращити його з тимчасовим часом, щоб він з’явився лише на 10 секунд, використовуючи наступне:

mshta "javascript:var sh=new ActiveXObject( 'WScript.Shell' ); sh.Popup( 'Message!', 10, 'Title!', 64 );close()"

Дивіться тут для більш детальної інформації.


Виявлено як вірус xD
Жульєн

2

Ви можете викликати функцію dll від user32.dll, я думаю, щось подібне

Rundll32.exe user32.dll, MessageBox (0, "текст", "titleText", {додаткові прапорці як найвища скринька повідомлень тощо})

Набравши його з мого телефону, не судіть мене ... інакше я б пов'язував зайві прапори.


Я можу отримати, rundll32.exe user32.dll,MessageBoxA Xщоб відобразити поле з повідомленнями X як заголовок, коли я це роблю у полі Виконати. Незалежно від того, що я роблю з X, я не можу змусити його інтерпретувати як декілька параметрів - все переходить у назву. Так rundll32.exe user32.dll,MessageBoxA (0, "MyTitle", "MyText", 0)відображається поле повідомлень із заголовком, (0, "MyTitle", "MyText", 0) але я не можу змусити його працювати ВСЕ з командного рядка - лише з поля Виконати. У командному рядку він взагалі нічого не робить. Це працює напевно з командного рядка або з пакетного файлу чи лише з поля Виконати?
Джеррі Єремія

rundll32.exe відповідно до doc може запускати лише ті процедури, які були спеціально розроблені для цієї мети, оскільки вони повинні розбирати частину "необов'язкових аргументів". Функції MessageBox-ish були розроблені не таким чином. Чому це працює через Win + R (Run box), це все ще велике питання!
Юрій Позняк

1

msg * /server:127.0.0.1 Введіть тут своє повідомлення


Windows cmd.exe говорить: "msg" не розпізнається як внутрішня чи зовнішня команда, функціонуюча програма чи пакетний файл.
Ентоні Хацопулос

@AnthonyHatzopoulos тому, що він підтримується лише в XP
pattyd

@pattyd XP та пізніші фактично
Jesan Fafon

@JesanFafon ні, це було припинено після XP ... Я думаю, ви маєте на увазі XP і раніше
pattyd

@pattyd У Windows 8.1 where msgповертається C:\Windows\System32\msg.exe. Я думаю, що ти думаєшnet send
Джесан Фафон

1

Ця програма може це зробити, якщо ви конвертуєте (обгортаєте) свої пакетні файли у виконувані файли.


  1. Просте повідомлення

    %extd% /messagebox Title Text
    

  1. Повідомлення про помилку

    %extd% /messagebox  Error "Error message" 16
    
  2. Скасувати Спробуйте ще раз

    %extd% /messagebox Title "Try again or Cancel" 5
    

4) Повідомлення "Ніколи більше не запитай мене"

%extd% /messageboxcheck Title Message 0 {73E8105A-7AD2-4335-B694-94F837A38E79}

0

Кращий варіант

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)

Автоматично обчислена 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"


@ender_scythe коментар працює ( start cmd /c "@echo off & mode con cols=18 lines=2 & echo My Popup Message & pause>nul"). Твій ні. Це повідомлення The screen cannot be set to the number of lines and columns specified.
перегукується,

@cdlvcdlv Я оновив відповідь. воно має працювати зараз для всіх, переглянути його.
Т.Тодуа

Це справді працює ... за умови, що xу поточному каталозі немає файлу, іменованого або ви не проти втратити його.
cdlvcdlv

Ви взяли ідеально працюючий коментар і зламали його. Тоді ви спробували додати якусь цінність (я надаю вам це), але потім ціною втрати будь-якого файлу з не дуже ймовірним іменем. Якщо хтось (з цікавості) дасть ваш код спробувати з такою невдачею, він втратить файл назавжди. Крім того, якщо існує папка з назвою x, ваша команда просто не працює. Не дякуйте, і будь ласка, просто виправте свій код. Вам навіть не потрібно користуватися однолінійкою. І якщо ви вважаєте, що ваш код такий хороший, будь ласка, опублікуйте його в Code Review .
cdlvcdlv

яка невдячність .... Я не ламав, але оновлював, пояснював і навіть давав автоматичне рішення ... (але є такі люди, як ти, яких я не можу задовольнити). удачі
Т.Тодуа

0

Ось мій пакетний сценарій, який я зібрав на основі хороших відповідей тут та інших публікацій

Ви можете встановити тайм-аут заголовка і навіть спати, щоб запланувати його для останнього & \ n для нового рядка

Назвіть це popup.bat і покладіть його у папку шляху Windows для роботи у глобальному масштабі на вашому ПК

Наприклад, popup Line 1\nLine 2буде створено спливаюче вікно з двома рядками (тип popup /?для використання)

Ось код

<!-- : Begin CMD
@echo off
cscript //nologo "%~f0?.wsf" %*
set pop.key=[%errorlevel%]
if %pop.key% == [-1] set pop.key=TimedOut
if %pop.key% == [1]  set pop.key=Ok
if %pop.key% == [2]  set pop.key=Cancel
if %pop.key% == [3]  set pop.key=Abort
if %pop.key% == [4]  set pop.key=Retry
if %pop.key% == [5]  set pop.key=Ignore
if %pop.key% == [6]  set pop.key=Yes
if %pop.key% == [7]  set pop.key=No
if %pop.key% == [10] set pop.key=TryAgain
if %pop.key% == [11] set pop.key=Continue
if %pop.key% == [99] set pop.key=NoWait
exit /b 
-- End CMD -->

<job><script language="VBScript">
'on error resume next
q   =""""
qsq =""" """
Set objArgs = WScript.Arguments
Set objShell= WScript.CreateObject("WScript.Shell")
Popup       =   0
Title       =   "Popup"
Timeout     =   0
Mode        =   0
Message     =   ""
Sleep       =   0
button      =   0
If objArgs.Count = 0 Then 
    Usage()
ElseIf objArgs(0) = "/?" or Lcase(objArgs(0)) = "-h" or Lcase(objArgs(0)) = "--help" Then 
    Usage()
End If
noWait = Not wait() 
For Each arg in objArgs
    If (Mid(arg,1,1) = "/") and (InStr(arg,":") <> 0) Then haveSwitch   =   True
Next
If not haveSwitch Then 
    Message=joinParam("woq")
Else
    For i = 0 To objArgs.Count-1 
        If IsSwitch(objArgs(i)) Then 
            S=split(objArgs(i) , ":" , 2)
                select case Lcase(S(0))
                    case "/m","/message"
                        Message=S(1)
                    case "/tt","/title"
                        Title=S(1)
                    case "/s","/sleep"
                        If IsNumeric(S(1)) Then Sleep=S(1)*1000
                    case "/t","/time"
                        If IsNumeric(S(1)) Then Timeout=S(1)
                    case "/b","/button"
                        select case S(1)
                            case "oc", "1"
                                button=1
                            case "ari","2"
                                button=2
                            case "ync","3"
                                button=3
                            case "yn", "4"
                                button=4
                            case "rc", "5"
                                button=5
                            case "ctc","6"
                                button=6
                            case Else
                                button=0
                        end select
                    case "/i","/icon"
                        select case S(1)
                            case "s","x","stop","16"
                                Mode=16
                            case "?","q","question","32"
                                Mode=32
                            case "!","w","warning","exclamation","48"
                                Mode=48
                            case "i","information","info","64"
                                Mode=64
                            case Else 
                                Mode=0
                        end select
                end select
        End If
    Next
End If
Message = Replace(Message,"/\n", "°"  )
Message = Replace(Message,"\n",vbCrLf)
Message = Replace(Message, "°" , "\n")
If noWait Then button=0

Wscript.Sleep(sleep)
Popup   = objShell.Popup(Message, Timeout, Title, button + Mode + vbSystemModal)
Wscript.Quit Popup

Function IsSwitch(Val)
    IsSwitch        = False
    If Mid(Val,1,1) = "/" Then
        For ii = 3 To 9 
            If Mid(Val,ii,1)    = ":" Then IsSwitch = True
        Next
    End If
End Function

Function joinParam(quotes)
    ReDim ArgArr(objArgs.Count-1)
    For i = 0 To objArgs.Count-1 
        If quotes = "wq" Then 
            ArgArr(i) = q & objArgs(i) & q 
        Else
            ArgArr(i) =     objArgs(i)
        End If
    Next
    joinParam = Join(ArgArr)
End Function

Function wait()
    wait=True
    If objArgs.Named.Exists("NewProcess") Then
        wait=False
        Exit Function
    ElseIf objArgs.Named.Exists("NW") or objArgs.Named.Exists("NoWait") Then
        objShell.Exec q & WScript.FullName & qsq & WScript.ScriptFullName & q & " /NewProcess: " & joinParam("wq") 
        WScript.Quit 99
    End If
End Function

Function Usage()
    Wscript.Echo _
                     vbCrLf&"Usage:" _
                    &vbCrLf&"      popup followed by your message. Example: ""popup First line\nescaped /\n\nSecond line"" " _
                    &vbCrLf&"      To triger a new line use ""\n"" within the msg string [to escape enter ""/"" before ""\n""]" _
                    &vbCrLf&"" _
                    &vbCrLf&"Advanced user" _
                    &vbCrLf&"      If any Switch is used then you must use the /m: switch for the message " _
                    &vbCrLf&"      No space allowed between the switch & the value " _
                    &vbCrLf&"      The switches are NOT case sensitive " _
                    &vbCrLf&"" _
                    &vbCrLf&"      popup [/m:""*""] [/t:*] [/tt:*] [/s:*] [/nw] [/i:*]" _
                    &vbCrLf&"" _
                    &vbCrLf&"      Switch       | value |Description" _
                    &vbCrLf&"      -----------------------------------------------------------------------" _
                    &vbCrLf&"      /m: /message:| ""1 2"" |if the message have spaces you need to quote it " _
                    &vbCrLf&"                   |       |" _
                    &vbCrLf&"      /t: /time:   | nn    |Duration of the popup for n seconds " _
                    &vbCrLf&"                   |       |<Default> untill key pressed" _
                    &vbCrLf&"                   |       |" _
                    &vbCrLf&"      /tt: /title: | ""A B"" |if the title have spaces you need to quote it " _
                    &vbCrLf&"                   |       | <Default> Popup" _
                    &vbCrLf&"                   |       |" _
                    &vbCrLf&"      /s: /sleep:  | nn    |schedule the popup after n seconds " _
                    &vbCrLf&"                   |       |" _
                    &vbCrLf&"      /nw /NoWait  |       |Continue script without the user pressing ok - " _
                    &vbCrLf&"                   |       | botton option will be defaulted to OK button " _
                    &vbCrLf&"                   |       |" _
                    &vbCrLf&"      /i: /icon:   | ?/q   |[question mark]"  _
                    &vbCrLf&"                   | !/w   |[exclamation (warning) mark]"  _
                    &vbCrLf&"                   | i/info|[information mark]"  _
                    &vbCrLf&"                   | x/stop|[stop\error mark]" _
                    &vbCrLf&"                   | n/none|<Default>" _
                    &vbCrLf&"                   |       |" _
                    &vbCrLf&"      /b: /button: | o     |[OK button] <Default>"  _
                    &vbCrLf&"                   | oc    |[OK and Cancel buttons]"  _
                    &vbCrLf&"                   | ari   |[Abort, Retry, and Ignore buttons]"  _
                    &vbCrLf&"                   | ync   |[Yes, No, and Cancel buttons]" _
                    &vbCrLf&"                   | yn    |[Yes and No buttons]" _
                    &vbCrLf&"                   | rc    |[Retry and Cancel buttons]" _
                    &vbCrLf&"                   | ctc   |[Cancel and Try Again and Continue buttons]" _
                    &vbCrLf&"      --->         | --->  |The output will be saved in variable ""pop.key""" _
                    &vbCrLf&"" _
                    &vbCrLf&"Example:" _
                    &vbCrLf&"        popup /tt:""My MessageBox"" /t:5 /m:""Line 1\nLine 2\n/\n\nLine 4""" _
                    &vbCrLf&"" _
                    &vbCrLf&"                     v1.9 By RDR @ 2020"
    Wscript.Quit
End Function

</script></job>

-3

йому потрібно ТОЛЬКО спливати, коли знаходиться всередині vm, тому технічно повинен бути код, наприклад:

if %machine_type% == virtual_machine then
   echo message box code
else
   continue normal installation code

downvote , тому що його встановлення не буде продовжена , якщо (% machine_type% == virtual_machine) == вірно
аніон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.