Tampilkan kotak sembulan / pesan dari file kumpulan Windows

153

Apakah ada cara untuk menampilkan kotak pesan dari file batch (mirip dengan bagaimana xmessagedapat digunakan dari bash-skrip di Linux)?

billyy
sumber
CMD.EXE, ini adalah prosesor perintah 32-bit yang mendukung perintah DOS.
Alan B
7
Ini disebut Windows Command Prompt.
Ricardo Polo Jaramillo

Jawaban:

121

Saya akan membuat file VBScript yang sangat sederhana dan menyebutnya menggunakan CScript untuk mem-parsing parameter baris perintah.

Sesuatu seperti yang tersimpan di bawah ini MessageBox.vbs:

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

Yang Anda sebut seperti:

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

MsgBoxreferensi jika Anda tertarik untuk menempuh rute ini.

Boflynn
sumber
terima kasih yang akan melakukannya, sakit membuat file tulis data ini untuk itu, dan daripada menggunakannya, daripada menghapusnya. harus bekerja dengan baik :)
billyy
1
Jawaban yang bagus Dengan cara ini Anda dapat memiliki kontrol total atas ikon, tombol, dan judul kotak. Juga ketika Anda menyimpan file di suatu tempat di sepanjang PATH Anda menyebutnya dari lokasi mana pun. Saya membuat beberapa file untuk peringatan dengan ikon berbeda.
Deus777
Bagus. BTW, Anda tidak perlu menggunakan CScript, setidaknya di Win10. Dengan CScript, saya mendapatkan beberapa teks tambahan di Command Prompt. Tanpa CScript, hanya ada peringatan, yang hebat
A Child of God
Saya tidak punya cscript. Saya menggunakan mulai sebagai gantinya.
sureshvv
127

Pertama-tama, DOS tidak ada hubungannya dengan itu, Anda mungkin menginginkan solusi baris perintah Windows (sekali lagi: tidak ada DOS, Windows murni, hanya bukan Window, tetapi sebuah Konsol).

Anda bisa menggunakan metode VBScript yang disediakan oleh boflynn atau Anda bisa salah menggunakan net sendatau msg. net sendhanya berfungsi pada versi windows yang lebih lama:

net send localhost Some message to display

Ini juga tergantung pada layanan Messenger yang harus dijalankan.

Untuk versi yang lebih baru (XP dan seterusnya, tampaknya):

msg "%username%" Some message to display

Perlu dicatat bahwa kotak pesan dikirim menggunakan msg.exe hanya akan bertahan selama 60 detik. Namun ini bisa diganti dengan /time:xxsaklar.

Joey
sumber
2
Anda dapat menggunakan variabel env untuk mendapatkan pengguna lokal -% USERNAME%. msg.exe ada di mesin XP Home saya, tetapi saya pernah mendengar akun anekdotal bahwa itu tidak ada di setiap versi Vista. Saya percaya layanan di balik NET KIRIM dinonaktifkan hari ini.
McDowell
Benar, terima kasih, lupakan envvar (jarang menggunakan apa pun di luar% UserProfile% dan yang saya tentukan sendiri dalam kelompok :)). Namun lucu, Anda benar tentang layanan Messenger. Bahkan tidak ada di VM XP saya, tetapi pengiriman bersih masih ada. msg.exe berfungsi di sana.
Joey
18
Saya pikir pilihan yang layak hilang dari jawaban dan menyediakannya. Tidak ada yang salah di sini. Anda tidak perlu merasa dipaksa untuk melakukan sesuatu atau saya entah bagaimana mengatakan bahwa boflynn salah. Saya hanya menambahkan opsi lain yang harusnya baik-baik saja untuk pertanyaan yang tidak memiliki satu jawaban pasti. Selain itu, Anda mungkin bukan satu-satunya dengan pertanyaan ini dan orang lain mungkin tidak ingin menggunakan VBScript karena alasan apa pun. Ini adalah situs komunitas, bukan hanya milik Anda :-)
Joey
8
Saya sendiri baru saja menggunakan ini untuk menelurkan pesan "I love you" di PC pacar saya dari shell jarak jauh.
Camilo Martin
1
Pada Windows 8 dan 10 saya telah menemukan versi Windows. Bagi saya itu bekerja pada pro tetapi tidak di rumah. Orang lain telah melaporkan itu berfungsi pada Home Premium dan Enterprise, Ultimate dll. Sepertinya rumah tua biasa tidak mendapatkannya (itu tidak ada di System32, tetapi dapat ditambahkan).
shox
84

Mungkin menampilkan sedikit flash, tetapi tidak perlu file temp. Harus bekerja sepanjang jalan kembali ke suatu tempat di era (IIRC) IE5.

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

Jangan lupa untuk keluar dari tanda kurung Anda jika Anda menggunakan if:

if 1 == 1 (
   mshta javascript:alert^("1 is equal to 1, amazing."^);close^(^);
)
Unggas
sumber
Ini bekerja sempurna dari command prompt, tetapi ketika saya tetap dalam file batch, saya mendapatkan error ini: close() was unexpected at this time.
eye_mew
@eye_mew mungkin Anda perlu menghapus ^karakter pelarian itu dalam file kelelawar
phuclv
1
Ini berfungsi dengan baik untuk saya dari file batch (saya di Windows 7) Bisakah kita menjalankan Javascript dengan cara ini? Bagaimana kita mengembalikan nilai ke file batch?
Jerry Jeremiah
1
Berikut adalah beberapa contoh luar biasa yang dapat Anda lakukan: dostips.com/forum/viewtopic.php?t=5311 Contoh LocalDateTime mengembalikan nilai. Terima kasih atas idenya!
Jerry Jeremiah
Keren node.js oleh Microsoft sebelum JavaScript sisi server keren - peluang yang terlewatkan bagi mereka.
Daniel Sokolowski
76

Ini akan memunculkan jendela Prompt Perintah lainnya:

START CMD /C "ECHO My Popup Message && PAUSE"
Dave Webb
sumber
1
ty mengagumkan! saya mungkin menggunakan ini dalam beberapa skrip lain :)
billyy
3
Opsi yang lebih baik adalah:, start cmd /c "@echo off & mode con cols=18 lines=2 & echo My Popup Message & pause>nul"ubah cols=18ke jumlah karakter dalam pesan + 2. Dan lines=2untuk berapa pun jumlah garis adalah +1.
ender_scythe
1
singkirkan PAUSE dan gunakancmd /k
Artelius
34

Coba:

Msg * "insert your message here" 

Jika Anda menggunakan command.com Windows XP, ini akan membuka kotak pesan.

Membuka jendela cmd baru tidak cukup dengan apa yang Anda minta, saya kumpulkan. Anda juga bisa menggunakan VBScript , dan menggunakannya dengan file .bat Anda. Anda akan membukanya dari file bat dengan perintah ini:

cd C:\"location of vbscript"

Apa yang dilakukan adalah mengubah command.com direktori akan mencari file dari, kemudian pada baris berikutnya:

"insert name of your vbscript here".vbs

Kemudian Anda membuat dokumen Notepad baru , ketikkan

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

Anda kemudian akan menyimpan ini sebagai file .vbs (dengan meletakkan ".vbs" di akhir nama file), simpan sebagai "Semua File" di kotak drop-down di bawah nama file (sehingga tidak menyimpan sebagai .txt ), lalu klik Simpan!

Unihedron
sumber
3
Anda tidak perlu <script/>tag.
surfasb
? cara menyisipkan baris baru (baris kosong) ke dalam teks saat menggunakan -> MSG * <text>
ZEE
@ZEE Jika Anda menggunakan hanya msg *Anda akan diminta untuk memasukkan pesan diikuti oleh ctrl-Z. Anda dapat memasukkan jeda baris di sini yang akan muncul dalam pesan Anda.
User5910
30

Masih banyak cara.

1) Geekiest dan hackiest - menggunakan IEXPRESS untuk membuat exe kecil yang akan membuat pop-up dengan satu tombol ( ini dapat membuat dua jenis pesan pop-up lagi ). Bekerja pada SETIAP windows dari XP dan di atasnya:

;@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) Menggunakan MSHTA. Juga bekerja pada setiap mesin windows dari XP dan di atasnya (meskipun OP tidak ingin bahasa "eksternal" JavaScript di sini diminimalkan). Harus disimpan sebagai .bat:

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

alert("Hello, world!");

atau dalam satu baris:

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

atau

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

atau

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

3) Inilah .bat/jscripthibrid berparameter (harus disimpan sebagai bat). Lagi-lagi menggunakan JavaScript meskipun ada permintaan OP, tetapi karena ia merupakan kelelawar, ia dapat disebut sebagai file kelelawar tanpa khawatir. Ini menggunakan POPUP yang memungkinkan sedikit lebih banyak kontrol daripada MSGBOX yang lebih populer . Ini menggunakan WSH, tetapi tidak MSHTA seperti pada contoh di atas.

 @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) dan satu jscript.net/.bathybrid (harus disimpan sebagai .bat). Kali ini menggunakan .NETdan mengkompilasi .exefile kecil yang dapat dihapus:

@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) dan pada akhirnya satu panggilan ke PowerShell yang membuat pop-up (dapat dipanggil dari command line atau dari batch jika PowerShell diinstal):

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

6) Dan pendekatan dbenham terlihat di sini

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

7 ) Untuk pemberitahuan baki sistem Anda dapat mencoba ini :

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

Dengan cara ini file batch Anda akan membuat skrip VBS dan menampilkan sembulan. Setelah berjalan, file batch akan menghapus file perantara itu.

Keuntungan menggunakan MSGBOX adalah benar-benar dapat dikustomisasi (mengubah judul, ikon dll) sementara MSG.exe tidak sebanyak itu.

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

Berikut adalah varian PowerShell yang tidak memerlukan pemuatan majelis sebelum membuat jendela, namun itu berjalan jauh lebih lambat (~ + 50%) daripada perintah PowerShell MessageBox yang diposting di sini oleh @npocmaka:

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

Anda dapat mengubah parameter terakhir dari "0x0" ke nilai di bawah ini untuk menampilkan ikon dalam dialog (lihat Metode Popup untuk referensi lebih lanjut):

        Berhenti0x10 Berhenti
        Tanda tanya0x20 Tanda Tanya
        Tanda seru0x30 Tanda Seru
        Tanda Informasi0x40 Tanda Informasi

Diadaptasi dari artikel Microsoft TechNet, PowerTip: Gunakan PowerShell untuk Menampilkan Jendela Munculan .

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

–Anda dapat menulis angka apa saja dari 0,1,2,3,4 bukannya 0 (sebelum simbol '+') & di sini adalah arti dari setiap angka:

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

–Anda dapat menulis angka apa saja dari 16,32,48,64 alih-alih 16 (setelah simbol '+') & di sini adalah arti dari setiap angka:

16 – Critical Icon  
32 – Warning Icon  
48 – Warning Message Icon   
64 – Information Icon  
hal2013
sumber
2
Bagaimana Anda mendapat respons dari skrip VB?
Aplikasi Suit Boy
7

Msg * "masukkan pesan Anda di sini"

berfungsi dengan baik, cukup simpan sebagai file .bat di notepad atau pastikan format diatur ke "semua file"

Max Runacres
sumber
Dokumen mengatakan bahwa "*" akan "Kirim pesan ke semua sesi di server yang ditentukan", yaitu. akan rusak pada layanan terminal atau perpindahan pengguna cepat
Fowl
2
Anda bisa menggunakanmsg %SESSIONNAME% msg
Fowl
5
msg * /time:0 /w Hello everybody!

Pesan ini menunggu selamanya sampai OK diklik (hanya berlangsung satu menit secara default) dan berfungsi dengan baik di Windows 8.1

Bis MoE
sumber
Jawaban yang sama hadir sejak 2009
jeb
Ups> _ <Tolong hapus itu :)
MoE bis
? cara memasukkan baris baru (baris kosong) ke dalam teks
ZEE
3
msg * /time:0 /w <C:\Somewhere\Message.txtdi mana dalam file tersebut adalah teks normal (mengandung CrLf's).
KLH bis
4

Untuk melakukan ini, Anda harus memiliki program kecil yang menampilkan kotak pesan dan menjalankannya dari file batch Anda.

Anda bisa membuka jendela konsol yang menampilkan prompt, tetapi mendapatkan kotak pesan GUI menggunakan cmd.exe dan teman saja tidak mungkin, AFAIK.

Macke
sumber
sebuah prompt mungkin melakukannya ... apakah Anda memiliki lebih dari itu?
billyy
1
echo "xx", jeda, atau set / p var = prompt adalah opsi cmd.exe
Macke
@ nickl-: lebih baik begini?
Macke
3

Saya menggunakan utilitas bernama msgbox.exe dari sini: http://www.paulsadowski.com/WSH/cmdprogs.htm

zhongshu
sumber
Menurut Symantec antivirus, arsip ini mengandung Trojan.
David
3
@ David - Saya punya file batch dan teks yang ditandai sebagai permusuhan oleh antivirus. Sebenarnya saya sudah meminta antivirus AVG menangkap instruksi baris perintah dan mengklaim itu adalah virus.
James K
2
FWIW Virus Total mengatakan 11/51 checker virus mendeteksi virus pada file itu: virustotal.com/en/file/…
Matthew Lock
3

Anda dapat menggunakan Zenity . Zenity memungkinkan untuk mengeksekusi kotak dialog dalam skrip command-line dan shell. Info lebih lanjut juga dapat ditemukan di Wikipedia .

Ini adalah lintas-platform: penginstal Windows untuk Windows dapat ditemukan di sini .

parvus
sumber
3

Mengikuti pada jawaban @ Fowl, Anda dapat memperbaikinya dengan batas waktu hanya muncul selama 10 detik menggunakan yang berikut:

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

Lihat di sini untuk detail lebih lanjut.

Rafi
sumber
Terdeteksi sebagai virus xD
Julien
2

Anda dapat menjalankan fungsi dll dari user32.dll saya pikir Sesuatu seperti

Rundll32.exe user32.dll, MessageBox (0, "text", "titleText", {tanda tambahan untuk seperti kotak pesan paling atas dll})

Mengetiknya dari Ponsel saya, jangan menilai saya ... kalau tidak saya akan menautkan bendera tambahan.

Entropi
sumber
Saya bisa rundll32.exe user32.dll,MessageBoxA Xmenampilkan kotak pesan dengan X sebagai judul ketika saya melakukannya di kotak Jalankan. Apa pun yang saya buat X menjadi saya tidak bisa menafsirkannya sebagai beberapa parameter - semuanya masuk ke dalam judul. Jadi rundll32.exe user32.dll,MessageBoxA (0, "MyTitle", "MyText", 0)menampilkan kotak pesan dengan judul (0, "MyTitle", "MyText", 0) Tapi saya tidak bisa berfungsi sama sekali dari baris perintah - hanya dari kotak Jalankan. Di baris perintah tidak ada artinya sama sekali. Apakah ini bekerja dengan pasti dari baris perintah atau dari file batch atau hanya dari kotak Jalankan?
Jerry Jeremiah
rundll32.exe sesuai dokumen hanya dapat menjalankan prosedur yang dirancang khusus untuk tujuan ini, karena mereka harus menguraikan bagian "argumen opsional". Fungsi MessageBox-ish tidak dirancang dengan cara ini. Mengapa ini bekerja melalui Win + R (Run box), itu masih merupakan pertanyaan besar!
Yuriy Pozniak
1

msg * /server:127.0.0.1 Ketikkan pesan Anda di sini

Franco
sumber
Windows cmd.exe mengatakan: 'msg' tidak dikenali sebagai perintah internal atau eksternal, program yang dapat dijalankan atau file batch.
Anthony Hatzopoulos
@AnthonyHatzopoulos itu karena hanya didukung di XP
pattyd
@ pattyd XP dan yang lebih baru, sebenarnya
Jesan Fafon
@JesanFafon tidak, itu dihentikan setelah XP ... Saya pikir maksud Anda XP dan sebelumnya
pattyd
@ pattyd Pada Windows 8.1, where msgkembali C:\Windows\System32\msg.exe. Saya pikir Anda memikirkannet send
Jesan Fafon
1

Aplikasi ini dapat melakukannya, jika Anda mengkonversi (membungkus) file batch Anda menjadi file yang dapat dieksekusi.


  1. Kotak pesan sederhana

    %extd% /messagebox Title Text
    

  1. Galat kotak pesan

    %extd% /messagebox  Error "Error message" 16
    
  2. Batalkan Coba Lagi Kotak Pesan

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

4) "Jangan tanya aku lagi" Messagebox

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

Opsi yang lebih baik

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


Deskripsi:
lines= jumlah baris, ditambah 1
cols= jumlah karakter dalam pesan, ditambah 3 (Namun, minimum harus 15)

colsVersi yang dihitung secara otomatis :

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"

T.Todua
sumber
@ender_scythe comment berfungsi ( start cmd /c "@echo off & mode con cols=18 lines=2 & echo My Popup Message & pause>nul"). Milikmu tidak. Ini menggemakan pesan tetapi gagal untuk mengatur ukuran jendela kembali The screen cannot be set to the number of lines and columns specified.setidaknya di Windows 7.
cdlvcdlv
@cdlvcdlv Saya telah memperbarui jawabannya. itu harus bekerja sekarang untuk semua orang, merevisinya.
T.Todua
Ini memang berfungsi ... asalkan tidak ada file bernama xdi direktori saat ini atau Anda tidak keberatan kehilangan itu.
cdlvcdlv
Anda mengambil komentar yang berfungsi dengan baik dan memecahkannya. Kemudian Anda mencoba menambahkan beberapa nilai (saya akan memberi Anda itu) tetapi kemudian dengan harga kehilangan file apa pun dengan nama yang tidak terlalu tidak mungkin. Jika seseorang, (karena penasaran) mencoba kode Anda dengan nasib buruk itu akan kehilangan file untuk selamanya. Selain itu, jika ada folder bernama x, perintah Anda gagal. Jangan berterima kasih kepada saya dan tolong perbaiki kode Anda. Anda bahkan tidak perlu menggunakan satu-liner. Dan jika menurut Anda kode Anda sangat bagus, silakan posting di Tinjauan Kode .
cdlvcdlv
alangkah bersyukurnya .... Saya belum bangkrut, tetapi diperbarui, dijelaskan dan bahkan memberikan solusi otomatis ... (tetapi ada orang-orang seperti Anda, yang saya tidak bisa puas). semoga sukses
T.Todua
0

Ini adalah skrip kumpulan yang saya kumpulkan berdasarkan jawaban yang baik di sini & di pos lainnya

Anda dapat mengatur batas waktu judul & bahkan tidur untuk menjadwalkannya untuk yang terakhir & \ n untuk baris baru

Beri nama popup.bat & taruh di folder path windows Anda untuk bekerja secara global di pc Anda

Misalnya popup Line 1\nLine 2akan menghasilkan kotak popup 2 baris (ketikpopup /? untuk penggunaan)

Ini kodenya

<!-- : 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>
RDR
sumber
-3

hanya perlu popup ketika berada di dalam vm, jadi secara teknis, harus ada beberapa kode seperti:

if %machine_type% == virtual_machine then
   echo message box code
else
   continue normal installation code
Alien Ilegal
sumber
downvote karena instalasi tidak akan dilanjutkan jika (% machine_type% == virtual_machine) == true
anion