Windows toplu iş dosyasından bir açılır pencere / ileti kutusu gösterme


Yanıtlar:


121

Ben çok basit bir VBScript dosyası yapmak ve komut satırı parametrelerini ayrıştırmak için CScript kullanarak çağırır.

Aşağıdakine benzer bir şey kaydedildi MessageBox.vbs:

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

Buna şöyle derdiniz:

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

MsgBoxBu rotaya gitmekle ilgileniyorsanız referans .


bunu yapmak için teşekkürler, ben bir dosya oluşturmak bu veriyi ona yazmak ve onu kullanmak, silmek daha. should work fine :)
billyy

1
Mükemmel cevap. Bu şekilde simgeler, düğmeler ve kutu başlığı üzerinde tam kontrol sahibi olabilirsiniz. Ayrıca dosyanızı PATH boyunca bir yere kaydettiğinizde herhangi bir konumdan çağırırsınız. Farklı simgelerle uyarılar için birkaç dosya oluşturdum.
Deus777

Güzel. BTW, en azından Win10'da CScript kullanmanıza gerek yok. CScript ile, Komut İstemi'nde bazı ek metinler alırım. CScript olmadan, sadece harika bir uyarı var
Tanrı'nın Çocuğu

Benim cscriptim yoktu. Bunun yerine start'ı kullandım.
sureshvv

127

Her şeyden önce, DOS'un bununla bir ilgisi yoktur, muhtemelen bir Windows komut satırı çözümü istiyorsunuz (tekrar: DOS yok, saf Windows, sadece bir Pencere değil, bir Konsol).

Boflynn tarafından sağlanan VBScript yöntemini kullanabilir net sendveya yanlış kullanabilirsiniz veya msg. net sendyalnızca eski Windows sürümlerinde çalışır:

net send localhost Some message to display

Bu aynı zamanda çalışacak Messenger hizmetine de bağlıdır.

Daha yeni sürümler için (görünüşe göre XP ve üstü):

msg "%username%" Some message to display

Kullanılarak gönderilen bir mesaj kutusunun msg.exeyalnızca 60 saniye süreceği unutulmamalıdır . Ancak bu /time:xxanahtarla geçersiz kılınabilir .


2
Yerel kullanıcıyı almak için env değişkenlerini kullanabilirsiniz -% USERNAME%. msg.exe XP Ev makinemde, ancak Vista'nın her sürümünde olmayan anekdot hesapları duydum. NET SEND'in arkasındaki hizmetin bu günlerde devre dışı bırakıldığını düşünüyorum.
McDowell

Doğru, teşekkürler, envvar unuttum (nadiren% UserProfile% ve toplu olarak tanımlanmış olanlarımın ötesinde bir şey kullanın :)). Komik olsa da, Messenger hizmeti konusunda haklısınız. XP VM'imde bile yok, ancak net gönderme hala var. Yine de msg.exe çalışıyor.
Joey

18
Cevaplarda uygun bir seçenek eksik olduğunu düşündüm ve sağladım. Burada yanlış bir şey yok. Ne bir şey yapmaya mecbur hissetmenize gerek yok ne de bir şekilde boflynn'un yanlış olduğunu söylüyorum. Sadece tek bir kesin cevabı olmayan sorular için mükemmel olması gereken başka bir seçenek ekliyordum. Ayrıca, muhtemelen bu soruya sahip olan tek kişi siz değilsiniz ve diğerleri VBScript'i herhangi bir nedenle kullanmak istemeyebilir. Bu bir topluluk sitesi, sadece senin değil :-)
Joey

8
Ben kendim için sadece kız arkadaşımın PC'sinde bir uzak kabuktan bir "Seni seviyorum" mesajı ortaya çıkarmak için kullandım.
Camilo Martin

1
Windows 8 ve 10'da Windows sürümlerini buldum. Benim için pro üzerinde çalışıyor ama evde değil. Diğerleri Home Premium ve Enterprise, Ultimate vb. Üzerinde çalıştığını bildirdiler .. sade eski ev almıyor gibi görünüyor (System32 mevcut değildir, ancak eklenebilir).
shox

84

Biraz flaş gösterebilir, ancak geçici dosyalar gerekmez. (IIRC) IE5 döneminde bir yere kadar çalışmalı.

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

Unutma senin parantez kaçmak kullanmakta iseniz if:

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

Bu istemi komutundan mükemmel çalışıyor, ancak bir toplu iş dosyasında sopa zaman, bu hatayı alıyorum: close() was unexpected at this time.
eye_mew

@eye_mew belki ^bir yarasa dosyasında bu kaçış karakterleri kaldırmanız gerekiyor
phuclv

1
Bir toplu iş dosyasından benim için mükemmel çalıştı (Windows 7'deyim) Herhangi bir Javascript'i bu şekilde çalıştırabilir miyiz? Değerleri toplu iş dosyasına nasıl döndürürüz?
Jerry Jeremiah

1
Yapabileceğiniz şeylere bazı şaşırtıcı örnekler: dostips.com/forum/viewtopic.php?t=5311 LocalDateTime örneği bir değer döndürür. Fikir için teşekkürler!
Jerry Jeremiah

Sunucu tarafı JavaScript güzel olmadan Microsoft tarafından serin node.js - onlar için kaçırılmış bir fırsat.
Daniel Sokolowski

76

Bu, başka bir Komut İstemi penceresi açar:

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

1
harika ty! Ben birkaç komut dosyalarında kullanabilirsiniz :)
billyy

3
: Daha iyi bir seçenek olacaktır start cmd /c "@echo off & mode con cols=18 lines=2 & echo My Popup Message & pause>nul", değiştirmek cols=18mesajla + 2 karakter miktarına. Ve lines=2çizgi miktarı ne olursa olsun + 1'dir.
ender_scythe

1
DURAKLATTAN kurtulun ve kullanıncmd /k
Artelius

34

Deneyin :

Msg * "insert your message here" 

Windows XP'nin command.com adresini kullanıyorsanız, bu bir mesaj kutusu açar.

Yeni bir cmd penceresi açmak istediğin gibi değil, topladım. Ayrıca VBScript kullanabilir ve bunu .bat dosyanızla kullanabilirsiniz. Bunu şu komutla bat dosyasından açarsınız:

cd C:\"location of vbscript"

Bunun yaptığı komut, command.com'un dosyaları arayacağı dizini, ardından bir sonraki satırda değiştirmektir:

"insert name of your vbscript here".vbs

Sonra yeni bir Not Defteri belgesi oluşturun, yazın

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

Daha sonra bunu bir .vbs dosyası olarak kaydedeceksiniz (dosya adının sonuna ".vbs" koyarak), dosya adının altındaki açılır kutuya "Tüm Dosyalar" olarak kaydedin (böylece .txt olarak kaydedilmez) ), ardından Kaydet!


3
<script/>Etikete ihtiyacınız yok .
surfasb

? -> MSG * kullanıldığında metne yeni satır (boş satırlar) ekleme -> MSG * <text>
ZEE

@ZEE Yalnızca kullanırsanız msg *, önce bir mesaj girmeniz ve ardından ctrl-Z yazmanız istenir. Buraya mesajınızda görünecek satır sonlarını girebilirsiniz.
Kullanıcı5910

30

Birkaç yol daha.

1) En geeki ve hackiest - tek bir düğmeyle bir pop-up oluşturacak küçük exe oluşturmak için IEXPRESS'i kullanır ( iki tür açılır mesaj oluşturabilir ). Her XP ve üstü pencerede çalışır:

;@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) kullanma MSHTA. Ayrıca XP ve üzeri tüm Windows makinelerinde çalışır (OP "harici" dilleri istemese de burada JavaScript minimize edilmiştir). Şu şekilde kaydedilmelidir .bat:

@if (true == false) @end /*!
@echo off
mshta "about:<script src='file://%~f0'></script><script>close()</script>" %*
goto :EOF */

alert("Hello, world!");

veya bir satırda:

mshta "about:<script>alert('Hello, world!');close()</script>"

veya

mshta "javascript:alert('message');close()"

veya

mshta.exe vbscript:Execute("msgbox ""message"",0,""title"":close")

3) İşte parametreli .bat/jscripthibrit (olarak kaydedilmelidir bat). OP isteğine rağmen yine JavaScript kullanıyor, ancak bir yarasa olduğu için endişelenmeden bir bat dosyası olarak çağrılabilir. Daha popüler MSGBOX'tan biraz daha fazla kontrole izin veren POPUP kullanır . WSH kullanır, ancak yukarıdaki örnekte olduğu gibi MSHTA kullanmaz.

 @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) ve bir jscript.net/.batkarma (olarak kaydedilmelidir .bat) .Bu kez silinebilecek .NETküçük bir .exedosyayı kullanır ve derler :

@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) ve sonunda bir pop-up oluşturan tek bir powershell çağrısı (powershell yüklüyse komut satırından veya toplu işten çağrılabilir):

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

6) Ve burada görülen dbenham yaklaşımı

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

7 ) Bir sistem tepsisi bildirimleri için deneyebileceğiniz bu :

call SystemTrayNotification.bat  -tooltip warning -time 3000 -title "Woow" -text "Boom" -icon question

29

Bu şekilde toplu iş dosyanız bir VBS komut dosyası oluşturur ve bir açılır pencere gösterir. Çalıştırdıktan sonra, toplu iş dosyası bu ara dosyayı siler.

MSGBOX kullanmanın avantajı, MSG.exe kadar olmasa da gerçekten saklanabilir olmasıdır (başlığı, simgeyi vb.).

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

15

Pencereyi oluşturmadan önce montajları yüklemeyi gerektirmeyen bir PowerShell varyantı, ancak @npocmaka tarafından yayınlanan PowerShell MessageBox komutundan belirgin şekilde daha yavaş (~ +% 50) çalışıyor:

powershell (New-Object -ComObject Wscript.Shell).Popup("""Operation Completed""",0,"""Done""",0x0)

İletişim kutusundaki simgeleri görüntülemek için son parametreyi "0x0" dan aşağıdaki bir değere değiştirebilirsiniz ( daha fazla başvuru için Popup Yöntemi'ne bakın ):

        Dur0x10 Dur
        Soru işareti0x20 Soru İşareti
        Ünlem işareti0x30 Ünlem İşareti
        Bilgi İşareti0x40 Bilgi İşareti

PowerTip Microsoft PowerNet makalesinden uyarlanmıştır: Açılır Pencereyi Görüntülemek için PowerShell'i kullanın .


10
echo X=MsgBox("Message Description",0+16,"Title") >msg.vbs

– 0 yerine 0,1,2,3,4'ten ('+' sembolünden önce) herhangi bir sayı yazabilirsiniz & işte her sayının anlamı:

0 = Ok Button  
1 = Ok/Cancel Button  
2 = Abort/Retry/Ignore button  
3 = Yes/No/Cancel  
4 = Yes/No  

–16 yerine 16,32,48,64 ('+' sembolünden sonra) herhangi bir sayı yazabilirsiniz & işte her sayının anlamı:

16 – Critical Icon  
32 – Warning Icon  
48 – Warning Message Icon   
64 – Information Icon  

2
VB betiğinden nasıl yanıt alırsınız?
Suit Çocuk Uygulamaları

7

Msg * "mesajınızı buraya yazınız"

iyi çalışır, not defterinde bir .bat dosyası olarak kaydedin veya biçimin "tüm dosyalar" olarak ayarlandığından emin olun


Dokümanlar "*" ifadesinin "Belirtilen sunucudaki tüm oturumlara mesaj gönder" olduğunu, yani. terminal hizmetleri veya hızlı kullanıcı geçişi kırılacak
Fowl

2
kullanabilirsinizmsg %SESSIONNAME% msg
Fowl

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

Bu ileti, Tamam tıklanıncaya kadar (varsayılan olarak yalnızca bir dakika sürer) sonsuza kadar bekler ve Windows 8.1'de iyi çalışır


Aynı cevap 2009 yılından bu yana mevcuttur
jeb

Hata! _ <Lütfen silin :)
MEB bis

? metne yeni satır (boş satırlar) ekleme
ZEE

3
msg * /time:0 /w <C:\Somewhere\Message.txtdosyada normal metin (CrLf içeren).
MoE bis

4

Bunu yapmak için, bir ileti kutusu görüntüleyen ve bunu toplu iş dosyanızdan çalıştıran küçük bir programınızın olması gerekir.

Yine de bir komut istemi görüntüleyen bir konsol penceresi açabilirsiniz, ancak cmd.exe ve yalnızca arkadaşlarınızı kullanarak bir GUI ileti kutusu almak mümkün değildir, AFAIK.


istemi yapabilir ... daha fazlası var mı?
billyy

1
echo "xx", duraklatma veya set / p var = istemi cmd.exe seçenekleridir
Macke

@ nickl-: bu şekilde daha iyi mi?
Mart'ta Macke

3

Buradan msgbox.exe adlı bir yardımcı program kullanıyorum: http://www.paulsadowski.com/WSH/cmdprogs.htm


Symantec antivirüsüne göre, bu arşiv bir Truva atı içeriyor.
David

3
@David - Antivirüsler tarafından düşmanca olarak işaretlenmiş toplu iş ve metin dosyalarım vardı. Aslında AVG antivirüs komut satırı talimatı yakalamak ve bir virüs olduğunu iddia ettik.
James K

2
FWIW Virüs Toplamı 11/51 virüs denetleyicisinin bu dosyadaki virüsleri algıladığını söylüyor: virustotal.com/en/file/…
Matthew Lock

3

Zenity'yi kullanabilirsiniz . Zenity, komut satırı ve kabuk komut dosyalarında iletişim kutularının yürütülmesine izin verir. Wikipedia'da daha fazla bilgi de bulunabilir .

Platformlar arası: Windows için bir Windows yükleyicisi burada bulunabilir .


3

@ Fowl'un cevabını takip ederek, aşağıdakileri kullanarak sadece 10 saniye boyunca görünmesi için zaman aşımı ile geliştirebilirsiniz:

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

Daha fazla ayrıntı için buraya bakın.


Virüs xD olarak tespit edildi
Julien

2

Sen bence user gibi dll işlevini çağırabilirsiniz Bir şey gibi

Rundll32.exe user32.dll, MessageBox (0, "metin", "titleText", {en üstteki mesaj kutusu gibi ekstra bayraklar vb})

Telefonumdan yazarak, beni yargılama ... aksi takdirde ekstra bayrakları bağlarım.


Alabilirim rundll32.exe user32.dll,MessageBoxA Xben Çalıştır kutusuna bunu yaparken başlık olarak X ile bu mesaj kutusunu görüntülemek için. X ne yaparsam yapayım, birden fazla parametre olarak yorumlanamıyorum - her şey başlığa giriyor. Yani rundll32.exe user32.dll,MessageBoxA (0, "MyTitle", "MyText", 0)başlıklı bir mesaj (0, "MyTitle", "MyText", 0) kutusu görüntüler Ama komut satırından AT ALL çalışmasını alamıyorum - sadece Çalıştır kutusundan. Komut satırında hiçbir şey yapmaz. Komut satırından veya toplu iş dosyasından mı yoksa yalnızca Çalıştır kutusundan mı çalışıyor?
Jerry Jeremiah

doc başına rundll32.exe yalnızca "isteğe bağlı bağımsız değişkenler" bölümünü ayrıştırmaları gerektiğinden, yalnızca bu amaç için özel olarak tasarlanmış yordamları çalıştırabilir. MessageBox-ish işlevleri bu şekilde tasarlanmamıştır. Neden Win + R (Run box) ile çalışıyor, hala büyük bir soru!
Yuriy Pozniak

1

msg * /server:127.0.0.1 Mesajınızı buraya yazın


Windows cmd.exe diyor ki: 'msg' dahili veya harici komut, çalıştırılabilir program veya toplu iş dosyası olarak tanınmıyor.
Anthony Hatzopoulos

@AnthonyHatzopoulos sadece XP'de desteklendiği için
pattyd

@pattyd XP ve üstü, aslında
Jesan Fafon

@JesanFafon no, XP'den sonra durdu ... Sanırım XP ve daha önceki
pattyd

@pattyd Windows 8.1'de where msggeri döner C:\Windows\System32\msg.exe. Sanırım düşünüyorsunnet send
Jesan Fafon

1

Toplu iş dosyalarınızı yürütülebilir dosyalara dönüştürürseniz (sarırsanız) bu uygulama bunu yapabilir.


  1. Basit Mesaj Kutusu

    %extd% /messagebox Title Text
    

  1. Hata Mesaj Kutusu

    %extd% /messagebox  Error "Error message" 16
    
  2. İptal Tekrar Dene Mesaj Kutusu

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

4) "Bir daha asla sorma"

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

0

Daha iyi bir seçenek

set my_message=Hello world&& start cmd /c "@echo off & mode con cols=15 lines=2 & echo %my_message% & pause>nul"


Açıklama:
lines= satır sayısı,
cols= mesajdaki 1 karakter miktarı, artı 3 (Ancak, minimum olmalıdır 15)

Otomatik hesaplanan colssürüm:

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 yorum çalışır ( start cmd /c "@echo off & mode con cols=18 lines=2 & echo My Popup Message & pause>nul"). Seninki değil. İletiyi yansıtır, ancak The screen cannot be set to the number of lines and columns specified.en azından Windows 7'de dönen pencere boyutunu ayarlayamaz .
cdlvcdlv

@cdlvcdlv Cevabı güncelledim. şimdi herkes için çalışmalı, gözden geçirmeli.
T.Todua

Gerçekten çalışır ... xgeçerli dizinde adında bir dosya olmaması ya da kaybetmemeniz şartıyla .
cdlvcdlv

Mükemmel çalışan bir yorum aldınız ve bozdunuz. Sonra bir miktar değer eklemeye çalıştınız (bunu size vereceğim), ancak beklenmedik bir ada sahip herhangi bir dosyayı kaybetme pahasına. Birisi, (meraktan) kodunuzu böyle kötü bir şansla denerse, dosyayı iyi kaybedecektir. Ayrıca, adında bir klasör varsa x, komutunuz başarısız olur. Bana teşekkür etme ve lütfen kodunu düzelt. Tek astar kullanmanıza bile gerek yok. Kodunuzun çok iyi olduğunu düşünüyorsanız lütfen Kod İncelemesinde yayınlayın .
cdlvcdlv

ne bir kabahat .... Ben kırdı sığınak, ama güncellenmiş, açıkladı ve hatta otomatik çözüm verdi ... (ama sizin gibi insanlar, tatmin edemez kim var). iyi şanslar
T.Todua

0

İşte burada ve diğer yazılarda iyi cevaplara dayanarak bir araya getirdiğim toplu senaryom

Başlık zaman aşımı ayarlayabilir ve hatta ikinci satır için zamanlamak üzere uyuyabilirsiniz & yeni satır için \ n

Popup.bat olarak adlandırın ve bilgisayarınızda küresel olarak çalışmak için windows yolu klasörünüze koyun

Örneğin popup Line 1\nLine 2, 2 satırlık bir açılır kutu oluşturur ( popup /?kullanım türü )

İşte kod

<!-- : 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

SADECE bir vm içinde pop-up gerekiyor, bu yüzden teknik olarak, gibi bazı kod olmalıdır:

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

(% machine_type% == virtual_machine) == true
anyon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.