Подтвердить что ты не робот

Как создать всплывающие сообщения в пакете script?

Мне нужно знать, как создавать всплывающие сообщения в пакетных сценариях без, используя VBScript или KiXtart или любой другой внешний язык сценариев/программирования. Я об этом не знаю... не было никакой отправной точки. Я знаю NET SEND, но служба Messenger отключена в моей текущей среде.

4b9b3361

Ответ 1

Что касается ответа LittleBobbyTable - NET SEND не работает на Vista или Windows 7. Он был заменен MSG.EXE

Существует грубое решение, которое работает во всех версиях Windows. Сообщение о грубое всплывающее сообщение можно отправить, запустив новое окно cmd.exe, которое закрывается после нажатия клавиши.

start "" cmd /c "echo Hello world!&echo(&pause"

Если вы хотите, чтобы ваш script останавливался до тех пор, пока окно сообщения не будет уволено, вы можете добавить параметр /WAIT.

start "" /wait cmd /c "echo Hello world!&echo(&pause"

Ответ 2

msg * "Enter Your Message"

Помогает ли это?

Ответ 3

Вы можете использовать CSCRIPT.EXE или WSCRIPT.EXE (которые присутствовали в каждой версии Windows, так как, я полагаю, Windows 95):

echo msgbox "Hey! Here is a message!" > %tmp%\tmp.vbs
cscript /nologo %tmp%\tmp.vbs
del %tmp%\tmp.vbs

или

echo msgbox "Hey! Here is a message!" > %tmp%\tmp.vbs
wscript %tmp%\tmp.vbs
del %tmp%\tmp.vbs

Вы также можете выбрать более настраиваемую команду PopUp. В этом примере вы получите 10 секундное окно, чтобы щелкнуть OK, прежде чем тайм-аут:

echo set WshShell = WScript.CreateObject("WScript.Shell") > %tmp%\tmp.vbs
echo WScript.Quit (WshShell.Popup( "You have 10 seconds to Click 'OK'." ,10 ,"Click OK", 0)) >> %tmp%\tmp.vbs
cscript /nologo %tmp%\tmp.vbs
if %errorlevel%==1 (
  echo You Clicked OK
) else (
  echo The Message timed out.
)
del %tmp%\tmp.vbs

В приведенном выше контексте обе cscript и wscript будут действовать одинаково. При вызове из командного файла bot cscript и wscript приостанавливают пакетный файл до тех пор, пока они не закончат их script, а затем разрешите продолжить файл.

При вызове вручную из командной строки cscript не вернет управление в командную строку до тех пор, пока она не будет завершена, а wscript создаст отдельный поток для выполнения script, возвращая управление команде запрос еще до его завершения script.

Другие методы, обсуждаемые в этом потоке, не приводят к приостановке пакетных файлов, ожидая нажатия на сообщение. Ваш выбор будет продиктован вашими потребностями.

Ответ 4

Несколько способов (во всех из них script ждет нажатия кнопки в отличие от msg.exe).

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 не хочет "внешних" языков, jsvascript здесь минимизирован). Должно быть сохранено как .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). Он снова использует jscript, несмотря на запрос 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="timedout";
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) Хотя решение msg уже отправлено как ответ здесь, лучший способ использования:

msg * /self /w "hello world"

/self - это не документированный переключатель, который заставит msg отправлять сообщение только текущему пользователю.

Ответ 5

msg * Привет мир

работает для меня..

Ответ 6

Лучше всего использовать NET SEND, как описано на сайте Rob van der Woude.

В противном случае вам нужно будет использовать внешнюю программу сценариев. Пакетные файлы действительно предназначены для отправки сообщений через ECHO.

Ответ 7

@echo off
title message

echo what the password?
set/p "pass=>"

if not %pass% == password goto fail
msg *correct: Correct password!!!
goto end

:fail
msg *wrong: Wrong password!!!

:end

Ответ 8

Это очень просто, я создал пару строк кода, которые сделают это для вас

Итак, установите переменную как msg, а затем используйте этот код. он появится в окне сообщения VBS.

CODE:

@echo off
echo %msg% >vbs.txt
copy vbs.txt vbs.vbs
del vbs.txt
start vbs.vbs
timeout /t 1
del vbs.vbs
cls

Это то, что я придумал, оно должно работать для большинства ваших потребностей в сообщениях, а также работает с пробелами, в отличие от некоторых пакетных скриптов

Ответ 9

Легко сделать сообщение, вот как:

Сначала откройте notpad и введите:

msg "Message",0,"Title"

и сохраните его как Message.vbs.

Теперь в вашем типе пакетного файла:

Message.vbs %*

Ответ 10

msg * message goes here

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

pause >nul

Это должно задержать его, но затем оно закроется после нажатия кнопки.

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

@echo off

Я надеюсь, что все эти советы помогли!