Windows बैच फ़ाइल से पॉपअप / संदेश बॉक्स दिखाएँ


153

क्या एक बैच फ़ाइल से एक संदेश बॉक्स प्रदर्शित करने का एक तरीका है ( xmessageलिनक्स में बैश-स्क्रिप्ट से कैसे उपयोग किया जा सकता है)?


CMD.EXE, यह एक 32-बिट कमांड प्रोसेसर है जो डॉस कमांड का समर्थन करता है।
एलन बी

7
इसे विंडोज कमांड प्रॉम्प्ट कहा जाता है।
रिकार्डो पोलो जारामिलो

जवाबों:


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संदर्भ यदि आप इस मार्ग पर जाने में रुचि रखते हैं।


धन्यवाद कि यह करना होगा, बीमार एक फाइल बनाने के लिए यह डेटा लिखें, और इसे हटाने की तुलना में इसका उपयोग करें। ठीक काम करना चाहिए :)
बिली

1
बहुत बढ़िया जवाब। इस तरह से आप आइकन, बटन और बॉक्स शीर्षक पर कुल नियंत्रण कर सकते हैं। जब आप अपनी फ़ाइल को PATH के साथ कहीं सहेजते हैं तो आप उसे किसी भी स्थान से कॉल करते हैं। मैंने विभिन्न आइकनों के साथ अलर्ट के लिए कुछ फाइलें बनाई हैं।
Deus777

अच्छा लगा। BTW, आपको कम से कम Win10 में CScript का उपयोग करने की आवश्यकता नहीं है। CScript के साथ, मुझे कमांड प्रॉम्प्ट में कुछ अतिरिक्त टेक्स्ट मिलते हैं। CScript के बिना, केवल अलर्ट है, जो महान है
A Child of God

मेरे पास cscript नहीं थी। मैंने इसके बजाय स्टार्ट का इस्तेमाल किया।
सुरेशव

127

सबसे पहले, डॉस का इससे कोई लेना-देना नहीं है, आप शायद एक विंडोज कमांड लाइन समाधान चाहते हैं (फिर से: कोई डॉस, शुद्ध विंडोज, सिर्फ एक खिड़की नहीं, बल्कि एक कंसोल)।

आप या तो boflynn द्वारा प्रदान की गई VBScript विधि का उपयोग कर सकते हैं या आप गलत उपयोग कर सकते हैं net sendया msgnet sendकेवल पुराने संस्करणों पर काम करता है:

net send localhost Some message to display

हालांकि यह मैसेंजर सेवा पर भी निर्भर करता है।

नए संस्करणों के लिए (एक्सपी और आगे, जाहिरा तौर पर):

msg "%username%" Some message to display

यह ध्यान दिया जाना चाहिए कि उपयोग किया गया एक संदेश बॉक्स msg.exeकेवल 60 सेकंड तक चलेगा। हालांकि इसे /time:xxस्विच के साथ ओवरराइड किया जा सकता है ।


2
आप स्थानीय उपयोगकर्ता -% USERNAME% प्राप्त करने के लिए env चर का उपयोग कर सकते हैं। msg.exe मेरे XP होम मशीन पर है, लेकिन मैंने किस्सा सुना है कि यह विस्टा के हर संस्करण पर नहीं है। मेरा मानना ​​है कि इन दिनों NET SEND के पीछे की सेवा अक्षम है।
मैकडॉवेल

ठीक है, धन्यवाद, एन्वार को भूल गए (शायद ही कभी% UserProfile% से परे कुछ भी उपयोग करें और मेरे स्वयं के परिभाषित बैचों में :))। हालाँकि, आप मैसेंजर सेवा के बारे में सही हैं। यह मेरे XP वीएम पर भी मौजूद नहीं है, लेकिन नेट सेंड अभी भी मौजूद है। msg.exe वहाँ काम करता है, हालाँकि।
जॉय

18
मुझे लगा कि जवाबों से एक व्यवहार्य विकल्प गायब था और इसे प्रदान किया। यहां कुछ भी गलत नहीं है। न तो आपको कुछ करने के लिए मजबूर महसूस करने की जरूरत है और न ही मैं किसी तरह कह रहा हूं कि बोफ्लिन की गलत है। मैं सिर्फ एक और विकल्प जोड़ रहा था जो उन प्रश्नों के लिए पूरी तरह से ठीक होना चाहिए जिनके पास एक भी निश्चित उत्तर नहीं है। इसके अलावा, आप शायद इस सवाल के साथ केवल एक ही नहीं हैं और अन्य जो भी कारणों से VBScript का उपयोग नहीं करना चाहते हैं। यह एक सामुदायिक स्थल है, पूरी तरह से आपका नहीं :-)
जॉय

8
मैंने अपने लिए बस एक रिमोट शेल से अपनी प्रेमिका के पीसी पर "आई लव यू" संदेश प्रसारित करने के लिए इसका इस्तेमाल किया।
कैमिलो मार्टिन

1
विंडोज 8 और 10 पर मुझे विंडोज मामलों का संस्करण मिला है। मेरे लिए यह प्रो पर काम करता है लेकिन घर पर नहीं। अन्य लोगों ने बताया कि यह होम प्रीमियम और एंटरप्राइज, अल्टीमेट आदि पर काम करता है। लगता है कि सादे पुराने घर को यह नहीं मिलता है (यह सिस्टम 32 में मौजूद नहीं है, लेकिन इसे जोड़ा जा सकता है)।
shox

84

थोड़ा फ़्लैश दिखा सकते हैं, लेकिन कोई अस्थायी फ़ाइलों की आवश्यकता नहीं है। (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^(^);
)

यह कमांड प्रॉम्प्ट से पूरी तरह से काम करता है, लेकिन जब मैं इसे बैच फ़ाइल में चिपकाता हूं, तो मुझे यह त्रुटि मिलती है close() was unexpected at this time:।
eye_mew

@eye_mew शायद आपको ^एक
बची हुई

1
यह मेरे लिए एक बैच फ़ाइल से पूरी तरह से काम करता है (मैं विंडोज 7 पर हूं) क्या हम इस तरह से किसी भी जावास्क्रिप्ट को चला सकते हैं? हम बैच फ़ाइल में मान कैसे लौटाएंगे?
जेरी जेरेमिया

1
यहां उन कुछ अद्भुत उदाहरण हैं जो आप कर सकते हैं: dostips.com/forum/viewtopic.php?t=5311 LocalDateTime उदाहरण एक मान लौटाता है। विचार के लिए धन्यवाद!
जेरी जेरेमिया

Microsoft द्वारा कूल नोड.जेएस सर्वर साइड जावास्क्रिप्ट से पहले शांत था - उनके लिए एक चूक का अवसर।
डैनियल सोकोलोव्स्की

76

यह एक और कमांड प्रॉम्प्ट विंडो को पॉप-अप करेगा:

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

1
बहुत बढ़िया! मैं कुछ अन्य लिपियों में इसका उपयोग कर सकता
हूं

3
एक बेहतर विकल्प होगा: संदेश + 2 में वर्णों की मात्रा start cmd /c "@echo off & mode con cols=18 lines=2 & echo My Popup Message & pause>nul"बदलें cols=18। और lines=2जो भी लाइनों की राशि + 1 है।
ender_scythe


34

प्रयत्न :

Msg * "insert your message here" 

यदि आप विंडोज एक्सपी के कमशॉट का उपयोग कर रहे हैं, तो यह एक संदेश बॉक्स खोलेगा।

नई cmd विंडो खोलना वह नहीं है जो आप पूछ रहे थे, मैं इकट्ठा करता हूं। आप VBScript का भी उपयोग कर सकते हैं , और अपनी .bat फ़ाइल के साथ इसका । आप इसे इस कमांड के साथ बैट फाइल से खोलेंगे:

cd C:\"location of vbscript"

यह क्या करता है निर्देशिका को बदलने के लिए है, तो कम से कम अगली पंक्ति में फ़ाइलों के लिए खोज करेंगे:

"insert name of your vbscript here".vbs

फिर आप एक नया नोटपैड बनाएँ दस्तावेज़ टाइप करें

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

फिर आप इसे .vbs फ़ाइल (फ़ाइल नाम के अंत में ".vbs" लगाकर) के रूप में सहेजेंगे, फ़ाइल नाम के नीचे ड्रॉप डाउन बॉक्स में "सभी फाइलें" के रूप में सहेजें (इसलिए यह .txt के रूप में सहेजता नहीं है। ), फिर सहेजें पर क्लिक करें!


3
आपको <script/>टैग की आवश्यकता नहीं है ।
सर्फ़

> एमएसजी * <text> - का उपयोग करते समय कैसे पाठ में नई लाइन (रिक्त लाइनों) सम्मिलित करने के लिए
ज़ी

@ZEE यदि आप सिर्फ उपयोग करते हैं, msg *तो आपको ctrl-Z के बाद एक संदेश दर्ज करने के लिए प्रेरित किया जाएगा। आप यहां लाइन ब्रेक दर्ज कर सकते हैं जो आपके संदेश में दिखाई देगा।
User5910

30

कुछ और तरीके।

1) geekiest और hackiest - यह छोटे एक्स बनाने के लिए IEXPRESS का उपयोग करता है जो एक बटन के साथ एक पॉप-अप बनाएगा ( यह दो और प्रकार के पॉप-अप संदेश बना सकता है )। 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=

२) उपयोग करना MSHTA। एक्सपी और इसके बाद के संस्करण से प्रत्येक विंडोज़ मशीन पर काम करता है (ओपी नहीं चाहता है कि "बाहरी" भाषाएं यहां जावास्क्रिप्ट को कम से कम किया जाए)। के रूप में सहेजा जाना चाहिए .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)। यह ओपी अनुरोध के बावजूद फिर से जावास्क्रिप्ट का उपयोग करता है लेकिन यह एक बल्ला है क्योंकि इसे बिना चिंता के बैट फाइल के रूप में कहा जा सकता है। यह 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 [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

29

इस तरह आपकी बैच फ़ाइल VBS स्क्रिप्ट बनाएगी और पॉपअप दिखाएगी। इसके चलने के बाद, बैच फ़ाइल उस मध्यवर्ती फ़ाइल को हटा देगी।

MSGBOX का उपयोग करने का लाभ यह है कि यह वास्तव में अनुकूलन योग्य है (शीर्षक, आइकन आदि को बदलें) जबकि MSG.exe उतना नहीं है।

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

15

यहाँ एक PowerShell संस्करण है जिसे विंडो बनाने से पहले लोडिंग असेंबली की आवश्यकता नहीं है, हालाँकि यह @npocmaka द्वारा पोस्ट किए गए PowerShell MessageBox कमांड की तुलना में काफी धीमा (~ + 50%) चलता है:

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 के बजाय 0,1,2,3,4 से लिख सकते हैं ('+' प्रतीक से पहले) और यहाँ प्रत्येक संख्या का अर्थ है:

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

-आप किसी भी संख्या को 16 के बजाय 16,32,48,64 से लिख सकते हैं ('+' प्रतीक के बाद) और यहां प्रत्येक संख्या का अर्थ है:

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

2
आपको VB स्क्रिप्ट से कैसे प्रतिक्रिया मिलती है?
सूट बॉय एप्स

7

Msg * "यहां अपना संदेश डालें"

ठीक काम करता है, सिर्फ नोटपैड में एक .bat फ़ाइल के रूप में सहेजें या सुनिश्चित करें कि प्रारूप "सभी फ़ाइलों" पर सेट है


डॉक्स का कहना है कि "*" निर्दिष्ट सर्वर पर सभी सत्रों के लिए संदेश भेजेगा ", अर्थात। टर्मिनल सेवाओं या फास्ट यूजर स्विचिंग पर टूट जाएगा
Fowl

2
आप का उपयोग कर सकते हैंmsg %SESSIONNAME% msg
Fowl

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

जब तक ओके क्लिक नहीं किया जाता तब तक यह संदेश हमेशा इंतजार करता है (यह डिफ़ॉल्ट रूप से केवल एक मिनट तक रहता है) और विंडोज 8.1 में ठीक काम करता है


एक ही जवाब 2009 के बाद से मौजूद है
जेब

उफ़> _ <कृपया इसे हटा दें :)
MoE bis

? पाठ में नई-लाइन (रिक्त लाइनें) कैसे डालें
ZEE

3
msg * /time:0 /w <C:\Somewhere\Message.txtजहां फ़ाइल सामान्य पाठ है (जिसमें CrLf का है)।
MoE bis

4

ऐसा करने के लिए, आपके पास एक छोटा प्रोग्राम होना चाहिए जो एक संदेश बॉक्स प्रदर्शित करता है और जो आपके बैच फ़ाइल से चलता है।

आप एक कंसोल विंडो खोल सकते हैं जो एक संकेत प्रदर्शित करता है, लेकिन cmd.exe और दोस्तों का उपयोग करके GUI संदेश बॉक्स प्राप्त करना केवल AFBIK संभव नहीं है।


एक संकेत यह कर सकता है ... क्या आपके पास उस पर अधिक है?
बिली

1
इको "xx", पॉज़ या सेट / p var = प्रॉम्प्ट cmd.exe विकल्प हैं
Macke

@ निकल-: इस तरह से बेहतर है?
मैके

3

मैं यहाँ से msgbox.exe नामक एक उपयोगिता का उपयोग करता हूँ: http://www.paulsadowski.com/WSH/cmdprogs.htm


सिमेंटेक एंटीवायरस के अनुसार, इस संग्रह में एक ट्रोजन है।
डेविड

3
@ डेविड - मेरे पास बैच और टेक्स्ट फाइलें हैं जो एंटीवायरस द्वारा शत्रुतापूर्ण के रूप में चिह्नित की गई हैं। वास्तव में मैंने AVG एंटीवायरस को कमांड-लाइन इंस्ट्रक्शन पकड़ा है और दावा किया है कि यह एक वायरस था।
जेम्स के

2
FWIW वायरस कुल 11/51 वायरस चेकर्स उस फाइल पर वायरस का पता लगाता है: virustotal.com/en/file/…
मैथ्यू लॉक

3

आप Zenity का उपयोग कर सकते हैं । ज़ेनिटी कमांड-लाइन और शेल स्क्रिप्ट में डायलॉग बॉक्स के निष्पादन की अनुमति देता है। अधिक जानकारी विकिपीडिया पर भी देखी जा सकती है ।

यह क्रॉस-प्लेटफॉर्म है: विंडोज के लिए एक विंडोज इंस्टॉलर यहां पाया जा सकता है


3

@ Fowl के उत्तर के बाद, आप इसे केवल 10 सेकंड के लिए निम्नलिखित का उपयोग करके प्रदर्शित होने के लिए समय-सीमा में सुधार कर सकते हैं:

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

अधिक जानकारी के लिए यहां देखें ।


वायरस के रूप में पता चला XD
जूलियन

2

आप user32.dll से dll फ़ंक्शन को आमंत्रित कर सकते हैं मुझे लगता है कि कुछ ऐसा है

Rundll32.exe user32.dll, MessageBox (0, "text", "titleText", {सबसे ऊपरी संदेश बॉक्स आदि के लिए अतिरिक्त झंडे})

इसे मेरे फोन से टाइप करना, मुझे जज मत करना ... नहीं तो मैं अतिरिक्त झंडे जोड़ दूंगा।


rundll32.exe user32.dll,MessageBoxA Xजब मैं रन बॉक्स में करता हूं तो मुझे शीर्षक के रूप में एक्स के साथ एक संदेश बॉक्स प्रदर्शित करने के लिए मिल सकता है । इससे कोई फर्क नहीं पड़ता कि मैं X को क्या बनाता हूं मैं इसे कई मापदंडों के रूप में व्याख्या करने के लिए प्राप्त नहीं कर सकता हूं - सब कुछ शीर्षक में जाता है। तो rundll32.exe user32.dll,MessageBoxA (0, "MyTitle", "MyText", 0)एक मैसेजबॉक्स प्रदर्शित करता है, (0, "MyTitle", "MyText", 0) लेकिन शीर्षक के साथ मैं कमांड लाइन से AT ALL पर काम करने के लिए नहीं मिल सकता - केवल रन बॉक्स से। कमांड लाइन पर यह कुछ भी नहीं करता है। क्या यह कमांड लाइन से या बैच फ़ाइल से या केवल रन बॉक्स से सुनिश्चित होता है?
जेरी जेरेमिया

डॉक्टर के अनुसार rundll32.exe केवल उन प्रक्रियाओं को चला सकता है जो विशेष रूप से इस उद्देश्य के लिए डिज़ाइन किए गए थे, क्योंकि उन्हें "वैकल्पिक तर्क" भाग को पार्स करना होगा। MessageBox-ish फ़ंक्शन इस तरह से डिज़ाइन नहीं किए गए थे। यह विन + आर (रन बॉक्स) के माध्यम से क्यों काम करता है, यह अभी भी एक बड़ा सवाल है!
यूरी पोजनिअक

1

संदेश * /server:127.0.0.1 यहां अपना संदेश लिखें


Windows cmd.exe कहता है: 'msg' को आंतरिक या बाह्य कमांड, ऑपरेशनल प्रोग्राम या बैच फ़ाइल के रूप में मान्यता नहीं दी जाती है।
एंथनी हट्ज़ोपुलोस

@AnthonyHatzopoulos ऐसा इसलिए है क्योंकि यह केवल XP में समर्थित है
pattyd

@pattyd XP और बाद में, वास्तव में
जेसन फाफॉन

@JesanFafon नहीं, इसे XP के बाद बंद कर दिया गया था ... मुझे लगता है कि आपका मतलब XP और पहले का है
pattyd

विंडोज 8.1 पर @pattyd, 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.कम से कम मेरे विंडोज 7 में सेट करने में विफल रहता है
cdlvcdlv

@cdlvcdlv मैंने उत्तर को अपडेट कर दिया है। इसे अब सभी के लिए काम करना चाहिए, इसे संशोधित करना चाहिए।
टोडुआ

यह वास्तव में काम करता है ... बशर्ते कि xवर्तमान निर्देशिका में नाम की कोई फ़ाइल न हो या आप इसे खोने का बुरा न मानें।
cdlvcdlv

आपने पूरी तरह से काम करने वाली टिप्पणी ली और उसे तोड़ दिया। फिर आपने कुछ मूल्य जोड़ने की कोशिश की (मैं आपको वह अनुदान दूंगा) लेकिन फिर किसी भी फ़ाइल को बिना नाम के खो जाने की कीमत पर। यदि कोई, (जिज्ञासा से बाहर) आपके कोड को इतनी बुरी किस्मत के साथ आज़माता है तो यह अच्छे के लिए फाइल खो देगा। इसके अतिरिक्त, यदि कोई फ़ोल्डर मौजूद है जिसका नाम है x, तो आपका कमांड केवल विफल रहता है। मुझे धन्यवाद न दें और कृपया अपना कोड ठीक करें। आपको वन-लाइनर का उपयोग करने की भी आवश्यकता नहीं है। और अगर आपको लगता है कि आपका कोड इतना अच्छा है, तो कृपया इसे कोड समीक्षा में पोस्ट करें
cdlvcdlv

क्या एक आभार .... मैं टूट गया, लेकिन अद्यतन किया गया, समझाया गया और यहां तक ​​कि स्वचालित समाधान दिया गया ... (लेकिन आप जैसे लोग हैं, जिन्हें मैं संतुष्ट नहीं कर सकता)। शुभकामनाएँ
T.Todua

0

यहाँ मेरी बैच स्क्रिप्ट है जिसे मैंने यहाँ और अन्य पोस्ट में अच्छे उत्तरों के आधार पर एक साथ रखा है

आप शीर्षक टाइमआउट सेट कर सकते हैं और यहां तक ​​कि इसे नई पंक्ति के लिए बाद और \ n शेड्यूल करने के लिए भी सो सकते हैं

इसे popup.bat नाम दें और अपने पीसी पर विश्व स्तर पर काम करने के लिए इसे अपने विंडोज़ पथ फ़ोल्डर में रखें

उदाहरण के लिए popup Line 1\nLine 2एक 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

डाउनवोट क्योंकि इंस्टालेशन जारी नहीं रहेगा यदि (% machine_type% == virtual_machine) == सच
aion
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.