Hiển thị hộp bật lên / thông báo từ tệp bó Windows


Câu trả lời:


121

Tôi sẽ tạo một tệp VBScript rất đơn giản và gọi nó bằng CScript để phân tích các tham số dòng lệnh.

Một cái gì đó như sau được lưu trong MessageBox.vbs:

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

Mà bạn sẽ gọi như:

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

MsgBoxtham khảo nếu bạn quan tâm đến việc đi tuyến đường này.


cảm ơn sẽ làm điều đó, tôi sẽ tạo một tập tin ghi dữ liệu này vào nó, và hơn là sử dụng nó, hơn là xóa nó. nên hoạt động tốt :)
billyy

1
Câu trả lời chính xác. Bằng cách này, bạn có thể có toàn quyền kiểm soát các biểu tượng, nút và tiêu đề hộp. Ngoài ra khi bạn lưu tệp của mình ở đâu đó dọc theo PATH, bạn gọi nó từ bất kỳ vị trí nào. Tôi đã tạo một vài tệp để cảnh báo với các biểu tượng khác nhau.
Deus777

Đẹp. BTW, bạn không cần sử dụng CScript, ít nhất là trong Win10. Với CScript, tôi nhận được một số văn bản bổ sung trong Dấu nhắc lệnh. Không có CScript, chỉ có cảnh báo, thật tuyệt
Một đứa con của Chúa

Tôi đã không có cscript. Tôi đã sử dụng bắt đầu thay thế.
sureshvv

127

Trước hết, DOS không có gì để làm với nó, bạn có thể muốn một giải pháp dòng lệnh Windows (một lần nữa: không có DOS, Windows thuần túy, không chỉ là Window, mà là Console).

Bạn có thể sử dụng phương thức VBScript do boflynn cung cấp hoặc bạn có thể sử dụng sai net sendhoặc msg. net sendchỉ hoạt động trên các phiên bản cũ hơn của windows:

net send localhost Some message to display

Điều này cũng phụ thuộc vào dịch vụ Messenger để chạy, mặc dù.

Đối với các phiên bản mới hơn (XP trở đi, rõ ràng):

msg "%username%" Some message to display

Cần lưu ý rằng một hộp thông báo được gửi bằng cách sử dụng msg.exesẽ chỉ tồn tại trong 60 giây. Điều này tuy nhiên có thể được ghi đè bằng /time:xxchuyển đổi.


2
Bạn có thể sử dụng các biến env để có được người dùng cục bộ -% USERNAME%. Trình tin nhắn tin có trên máy XP Home của tôi, nhưng tôi đã nghe các tài khoản giai thoại rằng nó không có trên mọi phiên bản Vista. Tôi tin rằng dịch vụ đằng sau NET SEND bị vô hiệu hóa những ngày này.
McDowell

Phải, cảm ơn, đã quên envvar (hiếm khi sử dụng bất cứ thứ gì ngoài% UserProfile% và những cái được xác định của riêng tôi theo lô :)). Mặc dù vậy, thật buồn cười, bạn nói đúng về dịch vụ Messenger. Nó thậm chí không tồn tại trên máy ảo XP của tôi, nhưng gửi mạng vẫn tồn tại. Spy.exe hoạt động ở đó, mặc dù.
Joey

18
Tôi nghĩ rằng một lựa chọn khả thi đã bị thiếu trong các câu trả lời và cung cấp nó. Không có gì sai ở đây. Bạn cũng không cần phải cảm thấy bị buộc phải làm điều gì đó và tôi bằng cách nào đó nói rằng boflynn sai. Tôi chỉ thêm một tùy chọn khác hoàn toàn tốt cho những câu hỏi không có câu trả lời dứt khoát. Hơn nữa, có lẽ bạn không phải là người duy nhất có câu hỏi này và những người khác có thể không muốn sử dụng VBScript vì bất kỳ lý do gì. Đây là một trang cộng đồng, không chỉ của riêng bạn :-)
Joey

8
Bản thân tôi chỉ sử dụng điều này để tạo ra một tin nhắn "Tôi yêu bạn" trên PC của bạn gái tôi từ một chiếc vỏ từ xa.
Camilo Martin

1
Trên Windows 8 và 10 tôi đã tìm thấy phiên bản của Windows. Đối với tôi nó hoạt động trên pro nhưng không phải ở nhà. Những người khác đã báo cáo rằng nó hoạt động trên Home Premium và Enterprise, Ultimate, v.v. có vẻ như ngôi nhà cũ đơn giản không có được nó (nó không tồn tại trong System32, nhưng có thể được thêm vào).
shox

84

Có thể hiển thị một chút flash, nhưng không cần tập tin tạm thời. Nên hoạt động trở lại một nơi nào đó trong kỷ nguyên IE5 (IIRC).

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

Đừng quên thoát dấu ngoặc đơn nếu bạn đang sử dụng if:

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

Điều này hoạt động hoàn hảo từ dấu nhắc lệnh, nhưng khi tôi dán nó vào một tệp bó, tôi gặp lỗi này : close() was unexpected at this time.
eye_mew

@eye_mew có lẽ bạn cần xóa những ^ký tự thoát đó trong tệp dơi
phuclv

1
Nó hoạt động hoàn hảo với tôi từ một tệp bó (Tôi đang dùng Windows 7) Chúng tôi có thể chạy bất kỳ Javascript nào theo cách này không? Làm thế nào chúng ta sẽ trả lại giá trị cho tệp bó?
Jerry Jeremiah

1
Dưới đây là một số ví dụ tuyệt vời về những điều bạn có thể làm: dostips.com/forum/viewtopic.php?t=5311 Ví dụ LocalDateTime trả về một giá trị. Cảm ơn ý kiến!
Jerry Jeremiah

Cool.j.js của Microsoft trước khi JavaScript phía máy chủ tuyệt vời - một cơ hội bị bỏ lỡ cho họ.
Daniel Sokolowski

76

Điều này sẽ bật lên một cửa sổ Command Prompt khác:

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

1
tuyệt vời ty! tôi có thể sử dụng điều này trong một vài kịch bản khác :)
billyy

3
Tùy chọn tốt hơn sẽ là : start cmd /c "@echo off & mode con cols=18 lines=2 & echo My Popup Message & pause>nul", thay đổi cols=18số lượng ký tự trong tin nhắn + 2. Và lines=2số lượng dòng là + 1.
ender_scythe

1
thoát khỏi PAUSE và sử dụngcmd /k
Artelius

34

Thử :

Msg * "insert your message here" 

Nếu bạn đang sử dụng lệnh.com của Windows XP, điều này sẽ mở hộp thông báo.

Mở một cửa sổ cmd mới không hoàn toàn như những gì bạn yêu cầu, tôi thu thập. Bạn cũng có thể sử dụng VBScript và sử dụng tệp này với tệp .bat của mình. Bạn sẽ mở nó từ tệp bat với lệnh này:

cd C:\"location of vbscript"

Điều này không làm thay đổi thư mục lệnh.com sẽ tìm kiếm các tệp từ đó, sau đó trên dòng tiếp theo:

"insert name of your vbscript here".vbs

Sau đó, bạn tạo một tài liệu Notepad mới , nhập vào

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

Sau đó, bạn sẽ lưu tệp này dưới dạng tệp .vbs (bằng cách đặt ".vbs" ở cuối tên tệp), lưu dưới dạng "Tất cả tệp" trong hộp thả xuống bên dưới tên tệp (vì vậy nó không lưu dưới dạng .txt ), sau đó nhấp vào Lưu!


3
Bạn không cần <script/>thẻ.
Surfasb

? cách chèn dòng mới (dòng trống) trong văn bản khi sử dụng -> MSG * <text>
ZEE

@ZEE Nếu bạn chỉ sử dụng msg * bạn sẽ được nhắc nhập một tin nhắn theo sau bởi ctrl-Z. Bạn có thể nhập ngắt dòng ở đây sẽ xuất hiện trong tin nhắn của bạn.
Người dùng5910

30

Vài cách khác.

1) Geekiest và hackiest - nó sử dụng IEXPRESS để tạo exe nhỏ sẽ tạo ra một cửa sổ bật lên với một nút duy nhất ( nó có thể tạo thêm hai loại thông báo bật lên ). Hoạt động trên MỌI cửa sổ từ XP trở lên:

;@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) Sử dụng MSHTA. Cũng hoạt động trên mọi máy Windows từ XP trở lên (mặc dù OP không muốn các ngôn ngữ "bên ngoài", JavaScript ở đây được thu nhỏ). Nên được lưu dưới dạng .bat:

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

alert("Hello, world!");

hoặc trong một dòng:

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

hoặc là

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

hoặc là

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

3) Đây là thông số .bat/jscriptlai (nên được lưu dưới dạngbat ). Nó một lần nữa sử dụng JavaScript mặc dù yêu cầu OP nhưng vì nó là một con dơi nên nó có thể được gọi là một tập tin bat mà không phải lo lắng. Nó sử dụng POPUP cho phép kiểm soát nhiều hơn một chút so với MSGBOX phổ biến hơn . Nó sử dụng WSH, nhưng không phải MSHTA như trong ví dụ trên.

 @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) và một jscript.net/.bat kết hợp (nên được lưu dưới dạng .bat). Lần này, nó sử dụng .NETvà biên dịch một .exetệp nhỏ có thể bị xóa:

@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) và cuối cùng, một lệnh gọi tới powershell sẽ tạo ra một cửa sổ bật lên (có thể được gọi từ dòng lệnh hoặc từ lô nếu cài đặt powershell):

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

6) Và cách tiếp cận của dbenham được thấy ở đây

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

7 ) Đối với thông báo trên khay hệ thống, bạn có thể thử điều này :

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

29

Bằng cách này, tệp bó của bạn sẽ tạo tập lệnh VBS và hiển thị cửa sổ bật lên. Sau khi chạy, tệp bó sẽ xóa tệp trung gian đó.

Ưu điểm của việc sử dụng MSGBOX là nó thực sự có thể tùy chỉnh (thay đổi tiêu đề, biểu tượng, v.v.) trong khi MSG.exe không nhiều.

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

15

Đây là một biến thể PowerShell không yêu cầu tải các cụm trước khi tạo cửa sổ, tuy nhiên, nó chạy chậm hơn đáng kể (~ + 50%) so với lệnh PowerShell MessageBox được đăng ở đây bởi @npocmaka:

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

Bạn có thể thay đổi tham số cuối cùng từ "0x0" thành giá trị bên dưới để hiển thị các biểu tượng trong hộp thoại (xem Phương pháp Popup để tham khảo thêm):

        Dừng lại0x10 Dừng
        Dấu chấm hỏi0x20 Dấu hỏi
        Dấu chấm than0x30 Dấu chấm than
        Dấu thông tin0x40 Dấu thông tin

Được chuyển thể từ bài viết PowerTip của Microsoft TechNet : Sử dụng PowerShell để hiển thị Cửa sổ bật lên .


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

Bạn có thể viết bất kỳ số nào từ 0,1,2,3,4 thay vì 0 (trước ký hiệu '+') và đây là ý nghĩa của mỗi số:

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

Bạn có thể viết bất kỳ số nào từ 16,32,48,64 thay vì 16 (sau ký hiệu '+') và đây là ý nghĩa của mỗi số:

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

2
Làm thế nào để bạn nhận được phản hồi từ tập lệnh VB?
Ứng dụng Suit Boy

7

Msg * "chèn tin nhắn của bạn vào đây"

hoạt động tốt, chỉ cần lưu dưới dạng tệp .bat trong notepad hoặc đảm bảo định dạng được đặt thành "tất cả các tệp"


Các tài liệu nói rằng "*" sẽ "Gửi tin nhắn đến tất cả các phiên trên máy chủ được chỉ định", nghĩa là. sẽ ngừng hoạt động trên các dịch vụ đầu cuối hoặc chuyển đổi người dùng nhanh
Fowl

2
bạn có thể sử dụngmsg %SESSIONNAME% msg
Fowl

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

Thông báo này chờ mãi cho đến khi nhấp vào OK (nó chỉ tồn tại trong một phút theo mặc định) và hoạt động tốt trong Windows 8.1


Câu trả lời này cũng có mặt từ năm 2009
Jeb

Rất tiếc> _ <Vui lòng xóa nó :)
MoE bis

? cách chèn dòng mới (dòng trống) trong văn bản
ZEE

3
msg * /time:0 /w <C:\Somewhere\Message.txttrong đó trong tệp là văn bản bình thường (chứa CrLf's).
MoE bis

4

Để thực hiện việc này, bạn cần có một chương trình nhỏ hiển thị hộp thông báo và chạy chương trình đó từ tệp bó của bạn.

Bạn có thể mở một cửa sổ giao diện điều khiển hiển thị lời nhắc mặc dù, nhưng nhận được hộp thông báo GUI bằng cmd.exe và chỉ bạn bè là không thể, AFAIK.


một dấu nhắc có thể làm điều đó ... bạn có nhiều hơn về điều đó?
billyy

1
echo "xx", tạm dừng hoặc set / p var = prompt là các tùy chọn cmd.exe
Macke

@ nickl-: tốt hơn theo cách này?
Macke

3

Tôi sử dụng một tiện ích có tên là dirbox.exe từ đây: http://www.paulsadowski.com/WSH/cmdprogs.htmlm


Theo chương trình diệt virus Symantec, kho lưu trữ này chứa một Trojan.
David

3
@David - Tôi đã có các tệp văn bản và lô được gắn cờ là thù địch bởi các chương trình chống vi-rút. Trong thực tế, tôi đã có chương trình chống vi-rút AVG bắt một lệnh dòng lệnh và cho rằng đó là vi-rút.
James K

2
FWIW Virus Total cho biết 11/51 người kiểm tra vi rút phát hiện vi-rút trên tệp đó: virustotal.com/en/file/ mẹo
Matthew Lock

3

Bạn có thể sử dụng Zenity . Zenity cho phép thực thi các hộp thoại trong các tập lệnh shell và shell. Thêm thông tin cũng có thể được tìm thấy trên Wikipedia .

Đây là nền tảng chéo: trình cài đặt Windows cho Windows có thể được tìm thấy ở đây .


3

Theo câu trả lời của @ Fowl, bạn có thể cải thiện nó với thời gian chờ chỉ xuất hiện trong 10 giây bằng cách sử dụng như sau:

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

Xem ở đây để biết thêm chi tiết.


Được phát hiện là virus xD
Julien

2

Bạn có thể gọi hàm dll từ user32.dll tôi nghĩ một cái gì đó như

Rundll32.exe user32.dll, MessageBox (0, "văn bản", "titleText", {cờ bổ sung để thích hộp thư trên cùng, v.v.))

Nhập nó từ điện thoại của tôi, đừng phán xét tôi ... nếu không tôi sẽ liên kết các cờ phụ.


Tôi có thể nhận được rundll32.exe user32.dll,MessageBoxA Xđể hiển thị một hộp thông báo với X là tiêu đề khi tôi làm điều đó trong hộp Run. Bất kể tôi làm X là gì, tôi không thể hiểu nó là nhiều tham số - mọi thứ đều đi vào tiêu đề. Vì vậy, rundll32.exe user32.dll,MessageBoxA (0, "MyTitle", "MyText", 0)hiển thị một hộp thông báo có tiêu đề (0, "MyTitle", "MyText", 0) Nhưng tôi không thể làm cho nó hoạt động AT ALL từ dòng lệnh - chỉ từ hộp Run. Trên dòng lệnh nó không làm gì cả. Nó hoạt động chắc chắn từ một dòng lệnh hoặc từ một tệp bó hoặc chỉ từ hộp Run?
Jerry Jeremiah

rundll32.exe theo tài liệu chỉ có thể chạy các quy trình được thiết kế riêng cho mục đích này, vì chúng phải phân tích phần "đối số tùy chọn". Các hàm MessageBox-ish không được thiết kế theo cách này. Tại sao nó hoạt động thông qua Win + R (Hộp chạy), đây vẫn là một câu hỏi lớn!
Yuriy Pozniak

1

tin nhắn * /server:127.0.0.1 Nhập tin nhắn của bạn vào đây


Windows cmd.exe nói: 'Trình thông báo' không được nhận dạng dưới dạng lệnh bên trong hoặc bên ngoài, chương trình có thể hoạt động hoặc tệp bó.
Anthony Hatzopoulos

@AnthonyHatzopoulos đó là vì nó chỉ được hỗ trợ trong XP
pattyd

@pattyd XP và sau đó, thực sự
Jesan Fafon

@JesanFafon không, nó đã bị ngừng sau XP ... Tôi nghĩ bạn có nghĩa là XP và trước đó
pattyd

@pattyd Trên Windows 8.1, where msgtrả về C:\Windows\System32\msg.exe. Tôi nghĩ bạn đang nghĩ đếnnet send
Jesan Fafon

1

Ứng dụng này có thể làm điều đó, nếu bạn chuyển đổi (bọc) các tệp bó của bạn thành các tệp thực thi.


  1. Hộp thư đơn giản

    %extd% /messagebox Title Text
    

  1. Hộp thông báo lỗi

    %extd% /messagebox  Error "Error message" 16
    
  2. Hủy thử lại hộp thư

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

4) "Không bao giờ hỏi lại tôi" Hộp thư

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

0

Một lựa chọn tốt hơn

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


Mô tả:
lines= số lượng dòng, cộng với 1
cols= lượng ký tự trong tin nhắn, cộng với 3 (Tuy nhiên, tối thiểu phải là15 )

colsPhiên bản tự động tính toán :

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 bình luận hoạt động ( start cmd /c "@echo off & mode con cols=18 lines=2 & echo My Popup Message & pause>nul"). Bạn không. Nó lặp lại thông báo nhưng không thể đặt kích thước cửa sổ trở lại The screen cannot be set to the number of lines and columns specified.ít nhất trong Windows 7.
cdlvcdlv

@cdlvcdlv Tôi đã cập nhật câu trả lời. nó nên làm việc bây giờ cho mọi người, sửa lại nó
T.Todua

Nó thực sự hoạt động ... với điều kiện là không có tệp nào xtrong thư mục hiện tại hoặc bạn không ngại mất nó.
cdlvcdlv

Bạn đã có một nhận xét làm việc hoàn hảo và phá vỡ nó. Sau đó, bạn đã cố gắng thêm một số giá trị (tôi sẽ cấp cho bạn điều đó) nhưng sau đó với cái giá là mất bất kỳ tệp nào có tên không quá khó xảy ra. Nếu ai đó, (vì tò mò) thử mã của bạn với một điều xui xẻo như vậy, nó sẽ mất tập tin vĩnh viễn. Ngoài ra, nếu có một thư mục có tên x, lệnh của bạn sẽ thất bại. Đừng cảm ơn tôi và làm ơn chỉ sửa mã của bạn. Bạn thậm chí không cần sử dụng một lớp lót. Và nếu bạn nghĩ rằng mã của bạn rất tốt, xin vui lòng gửi nó trong Đánh giá mã .
cdlvcdlv

Thật là một sự may mắn .... Tôi chưa phá vỡ, nhưng đã cập nhật, giải thích và thậm chí đưa ra giải pháp tự động ... (nhưng có những người như bạn, những người tôi không thể thỏa mãn). chúc may mắn
T.Todua

0

Đây là tập lệnh bó của tôi mà tôi kết hợp dựa trên các câu trả lời hay ở đây & trong các bài viết khác

Bạn có thể đặt thời gian chờ tiêu đề & thậm chí ngủ để lên lịch cho lần sau & \ n cho dòng mới

Đặt tên là popup.bat và đặt nó vào thư mục đường dẫn windows để hoạt động toàn cầu trên máy tính của bạn

Ví dụ: popup Line 1\nLine 2sẽ tạo ra hộp bật lên 2 dòng (loạipopup /? để sử dụng)

Đây là mã

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

nó chỉ cần CHỈ để bật lên khi bên trong vm, vì vậy về mặt kỹ thuật, cần có một số mã như:

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

downvote vì quá trình cài đặt sẽ không được tiếp tục nếu (% machine_type% == virtual_machine) == true
anion
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.