Windows 배치 파일에서 팝업 / 메시지 상자 표시


153

배치 파일에서 메시지 상자를 표시하는 방법 xmessage이 있습니까 (Linux의 bash 스크립트에서 사용 하는 방법과 유사 )?


CMD.EXE는 DOS 명령을 지원하는 32 비트 명령 프로세서입니다.
Alan B

7
이를 Windows 명령 프롬프트라고합니다.
Ricardo Polo Jaramillo

답변:


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이 경로에 관심이 있다면 참조 하십시오.


덕분에 파일을 작성하면 데이터를 작성하고 삭제하는 것보다 사용합니다. 잘 작동합니다 :)
billyy 2009

1
좋은 대답입니다. 이 방법으로 아이콘, 버튼 및 상자 제목을 완전히 제어 할 수 있습니다. 또한 PATH를 따라 파일을 저장하면 모든 위치에서 파일을 호출합니다. 다른 아이콘으로 경고를위한 파일을 거의 만들지 않았습니다.
Deus777

좋은. BTW, 적어도 Win10에서는 CScript를 사용할 필요가 없습니다. CScript를 사용하면 명령 프롬프트에 추가 텍스트가 표시됩니다. CScript가 없으면 경고 만 있습니다.
하나님의 자녀

나는 cscript가 없었다. 대신 시작을 사용했습니다.
sureshvv

127

우선, DOS는 그것과 아무 관련이 없습니다. 아마도 Windows 명령 행 솔루션을 원할 것입니다.

boflynn에서 제공하는 VBScript 방법을 사용 net send하거나 또는 잘못 사용하거나을 사용할 수 있습니다 msg. net send이전 버전의 창에서만 작동합니다.

net send localhost Some message to display

그러나 이것은 메신저 서비스 실행에 달려 있습니다.

최신 버전 (XP 이상) :

msg "%username%" Some message to display

를 사용하여 보낸 메시지 상자는 msg.exe60 초 동안 만 지속됩니다. 그러나 이것은 /time:xx스위치 로 재정의 될 수 있습니다 .


2
env 변수를 사용하여 로컬 사용자 % USERNAME %을 (를) 얻을 수 있습니다. msg.exe는 내 XP 홈 컴퓨터에 있지만 일화 계정이 모든 버전의 Vista에 있지 않다는 이야기를 들었습니다. NET SEND 뒤의 서비스가 요즘 비활성화되어 있다고 생각합니다.
McDowell

고마워요, envvar를 잊어 버렸습니다 (% UserProfile % 이외의 것을 사용하지 마십시오). 그러나 웃긴 것은 메신저 서비스에 관한 것입니다. 내 XP VM에도 존재하지 않지만 net send는 여전히 존재합니다. 그러나 msg.exe가 작동합니다.
Joey

18
나는 실행 가능한 옵션이 답변에서 누락되었다고 생각하고 제공했습니다. 여기에 문제가 없습니다. 또한 당신이 무언가를하도록 강요받을 필요도없고, 어떻게 든 보 플린이 잘못되었다고 말하는 것도 아닙니다. 나는 단 하나의 정답이없는 질문에 완벽하게 맞는 다른 옵션을 추가하고있었습니다. 또한이 질문을 가진 유일한 사람은 아니며 다른 이유로 VBScript를 사용하지 않을 수도 있습니다. 이 사이트는 귀하 만이 아닌 커뮤니티 사이트입니다 :-)
Joey

8
나는 단지 이것을 사용하여 원격 쉘에서 여자 친구의 PC에 "사랑해"메시지를 냈다.
Camilo Martin

1
Windows 8 및 10에서 Windows 버전이 중요합니다. 나를 위해 그것은 집에서가 아니라 프로에서 작동합니다. 다른 사람들은 Home Premium 및 Enterprise, Ultimate 등에서 작동한다고보고했습니다. 평범한 오래된 집은 그것을 얻지 못하는 것 같습니다 (System32에는 없지만 추가 할 수 있음).
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 어쩌면 당신은 그것들을 제거해야합니다 ^ 박쥐 파일에서 이스케이프 문자
phuclv

1
배치 파일에서 완벽하게 작동했습니다 (Windows 7에 있습니다).이 방법으로 Javascript를 실행할 수 있습니까? 배치 파일에 값을 어떻게 반환합니까?
Jerry Jeremiah

1
수행 할 수있는 몇 가지 놀라운 예는 다음과 같습니다. dostips.com/forum/viewtopic.php?t=5311 LocalDateTime 예제는 값을 반환합니다. 아이디어 주셔서 감사합니다!
Jerry Jeremiah

서버 측 JavaScript가 멋지 기 전에 Microsoft의 Cool node.js-기회가 누락되었습니다.
다니엘 소콜로프 스키

76

다른 명령 프롬프트 창이 나타납니다.

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

1
멋진 타이! 나는 이것을 몇 가지 다른 스크립트에서 사용할 수있다 :)
billyy

3
더 좋은 옵션은 다음과 같습니다. start cmd /c "@echo off & mode con cols=18 lines=2 & echo My Popup Message & pause>nul", cols=18메시지의 문자 수를 +2로 변경하십시오 . 그리고 lines=2라인의 양에 관계없이 +1입니다.
ender_scythe

1
일시 cmd /k
중지를

34

시도 :

Msg * "insert your message here" 

Windows XP의 command.com을 사용하는 경우 메시지 상자가 열립니다.

새로운 cmd 창을 여는 것은 당신이 요구 한 것이 아닙니다. VBScript 를 사용하고 .bat 파일과 함께 사용할 수도 있습니다 . 다음 명령을 사용하여 bat 파일에서 열 수 있습니다.

cd C:\"location of vbscript"

이것이하는 일은 디렉토리 command.com이 다음 줄에서 파일을 검색하는 것입니다.

"insert name of your vbscript here".vbs

그런 다음 새 메모장 문서 를 작성하고 다음을 입력하십시오.

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

그런 다음 파일 이름 끝에 ".vbs"를 넣어 .vbs 파일로 저장하고 파일 이름 아래 드롭 다운 상자에 "모든 파일"로 저장합니다 (따라서 .txt로 저장되지 않음) )을 클릭 한 다음 저장을 클릭하십시오.


3
<script/>태그 가 필요하지 않습니다 .
surfasb

-> MSG 사용시 텍스트에 줄 바꾸기 (빈 줄)를 삽입하는 방법 * <text>
ZEE

@ZEE 그냥 사용 msg *하면 메시지를 입력하라는 메시지가 표시되고 ctrl-Z가 표시됩니다. 메시지에 나타날 줄 바꿈을 여기에 입력 할 수 있습니다.
5910

30

더 많은 방법이 있습니다.

1) 가장 괴상하고 가장 까다로운-IEXPRESS를 사용하여 작은 exe를 만들어 단일 버튼 으로 팝업을 만듭니다 (두 가지 유형의 팝업 메시지를 만들 수 있음 ). XP 이상의 모든 창에서 작동합니다.

;@echo off
;setlocal

;set ppopup_executable=popupe.exe
;set "message2=click OK to continue"
;
;del /q /f %tmp%\yes >nul 2>&1
;
;copy /y "%~f0" "%temp%\popup.sed" >nul 2>&1

;(echo(FinishMessage=%message2%)>>"%temp%\popup.sed";
;(echo(TargetName=%cd%\%ppopup_executable%)>>"%temp%\popup.sed";
;(echo(FriendlyName=%message1_title%)>>"%temp%\popup.sed"
;
;iexpress /n /q /m %temp%\popup.sed
;%ppopup_executable%
;rem del /q /f %ppopup_executable% >nul 2>&1

;pause

;endlocal
;exit /b 0


[Version]
Class=IEXPRESS
SEDVersion=3
[Options]
PackagePurpose=InstallApp
ShowInstallProgramWindow=1
HideExtractAnimation=1
UseLongFileName=0
InsideCompressed=0
CAB_FixedSize=0
CAB_ResvCodeSigning=0
RebootMode=N
InstallPrompt=%InstallPrompt%
DisplayLicense=%DisplayLicense%
FinishMessage=%FinishMessage%
TargetName=%TargetName%
FriendlyName=%FriendlyName%
AppLaunched=%AppLaunched%
PostInstallCmd=%PostInstallCmd%
AdminQuietInstCmd=%AdminQuietInstCmd%
UserQuietInstCmd=%UserQuietInstCmd%
SourceFiles=SourceFiles
[SourceFiles]
SourceFiles0=C:\Windows\System32\
[SourceFiles0]
%FILE0%=


[Strings]
AppLaunched=subst.exe
PostInstallCmd=<None>
AdminQuietInstCmd=
UserQuietInstCmd=
FILE0="subst.exe"
DisplayLicense=
InstallPrompt=

2) 사용 MSHTA. 또한 XP 이상의 모든 Windows 시스템에서 작동합니다 (OP는 "외부"언어를 원하지 않지만 JavaScript는 최소화됩니다). 다음과 같이 저장해야합니다 .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 ). OP 요청에도 불구하고 JavaScript를 다시 사용하지만 박쥐이므로 걱정하지 않고 박쥐 파일로 호출 할 수 있습니다. 그것은 대중적인 MSGBOX 보다는 조금 더 많은 통제를 허용하는 POPUP 를 사용합니다 . 위의 예와 같이 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을 한 번만 호출합니다 (powershell이 ​​설치된 경우 명령 행 또는 배치에서 호출 가능).

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

6) 그리고 여기에 보이는 dbenham의 접근

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 스크립트에서 어떻게 응답합니까?
Suit Boy Apps

7

메시지 * "여기에 메시지를 입력하십시오"

메모장에서 .bat 파일로 저장하거나 형식이 "모든 파일"로 설정되어 있는지 확인하십시오.


문서에서 "*"는 "지정된 서버의 모든 세션에 메시지를 보냅니다"라고 말합니다. 터미널 서비스 또는 빠른 사용자 전환 중단
Fowl

2
당신은 사용할 수 있습니다msg %SESSIONNAME% msg
Fowl

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

이 메시지는 확인을 클릭 할 때까지 (기본적으로 1 분 동안 만 지속됨) 계속 대기하며 Windows 8.1에서 제대로 작동


같은 대답은 2009 존재

죄송합니다> _ <삭제하십시오 :)
MoE bis

? 텍스트에 개행 (빈 줄)을 삽입하는 방법
ZEE

3
msg * /time:0 /w <C:\Somewhere\Message.txt파일의 일반 텍스트 (CrLf 포함)입니다.
MoE bis

4

이렇게하려면 메시지 상자를 표시하고 배치 파일에서 실행하는 작은 프로그램이 있어야합니다.

프롬프트를 표시하는 콘솔 창을 열 수는 있지만 cmd.exe 및 친구 만 사용하여 GUI 메시지 상자를 얻는 것은 불가능합니다 (AFAIK).


프롬프트가 그것을 할 수도 있습니다 ... 그것에 대해 더 많은 것이 있습니까?
billyy 2009

1
에코 "xx", 일시 중지 또는 설정 / p var = prompt는 cmd.exe 옵션
Macke

@ nickl- :이 방법이 더 낫습니까?
Macke

3

여기에서 msgbox.exe라는 유틸리티를 사용합니다. http://www.paulsadowski.com/WSH/cmdprogs.htm


시만텍 안티 바이러스에 따르면이 아카이브에는 트로이 목마가 포함되어 있습니다.
David

3
@David-안티 바이러스에 의해 배치 및 텍스트 파일이 적대적인 것으로 표시되었습니다. 사실 AVG 바이러스 백신이 명령 줄 명령을 받아 바이러스라고 주장했습니다.
James K

2
FWIW Virus Total에 따르면 11/51 바이러스 검사기에서 해당 파일의 바이러스를 발견했습니다. virustotal.com/en/file/…
Matthew Lock

3

Zenity 를 사용할 수 있습니다 . Zenity를 사용하면 명령 줄 및 셸 스크립트에서 대화 상자를 실행할 수 있습니다. 더 많은 정보는 Wikipedia 에서도 찾을 수 있습니다 .

플랫폼 간 : Windows 용 Windows 설치 프로그램은 여기 에서 찾을 수 있습니다 .


3

@Fowl의 답변에 따라 다음을 사용하여 시간 초과로 10 초 동안 만 표시되도록 향상시킬 수 있습니다.

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

자세한 내용은 여기 를 참조하십시오.


바이러스 xD로 탐지
Julien

2

user32.dll에서 dll 함수를 호출 할 수 있습니다.

Rundll32.exe user32.dll, MessageBox (0, "text", "titleText", {최상위 메시지 상자와 같은 추가 플래그})

내 전화에서 입력하면 나를 판단하지 마십시오 ... 그렇지 않으면 여분의 플래그를 연결합니다.


rundll32.exe user32.dll,MessageBoxA X실행 상자에서 X를 사용하여 메시지 상자를 제목으로 표시 할 수 있습니다 . X를 무엇으로 만들 든 여러 매개 변수로 해석 할 수는 없습니다. 모든 것이 제목에 들어갑니다. 그래서 rundll32.exe user32.dll,MessageBoxA (0, "MyTitle", "MyText", 0)디스플레이의 제목을 가진 메시지 박스 (0, "MyTitle", "MyText", 0) 하지만이 명령 줄에서 AT ALL을 동작하지 않습니다 - 단지 실행 상자에서. 커맨드 라인에서는 전혀 작동하지 않습니다. 명령 줄이나 배치 파일 또는 실행 상자에서만 제대로 작동합니까?
Jerry Jeremiah

doc에 따라 rundll32.exe 는 "선택적 인수"부분을 구문 분석해야하기 때문에이 목적을 위해 특별히 설계된 절차 만 실행할 수 있습니다. MessageBox-ish 함수는 이러한 방식으로 설계되지 않았습니다. Win + R (Run box)을 통해 작동하는 이유는 여전히 큰 질문입니다!
Yuriy Pozniak

1

msg * /server:127.0.0.1 여기에 메시지를 입력


Windows cmd.exe의 말 : 'msg'는 내부 또는 외부 명령, 실행 가능한 프로그램 또는 배치 파일로 인식되지 않습니다.
Anthony Hatzopoulos

XP에서만 지원되기 때문에
@AnthonyHatzopoulos

@pattyd XP 이상, 실제로
Jesan Fafon

@JesanFafon 아니오, XP 이후에 중단되었습니다 ... XP 및 이전 버전
pattyd

@pattyd Windows 8.1에서는을 where msg반환합니다 C:\Windows\System32\msg.exe. 당신이 생각하는 것net send
Jesan Fafon

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= 줄 수,
cols= 메시지에 1 자 더하기, 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_scy 댓글이 작동합니다 ( 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.적어도 내 Windows 7에서 반환 창 크기를 설정하지 못했습니다 .
cdlvcdlv

@ cdlvcdlv 답변을 업데이트했습니다. 이제 모든 사람을 위해 작동해야합니다.
T.Todua

x현재 디렉토리에 이름이 지정된 파일 이 없거나 잃어 버릴 염려 가 없다면 실제로 작동 합니다.
cdlvcdlv

당신은 완벽하게 작동하는 의견을 가지고 그것을 깨뜨 렸습니다. 그런 다음 약간의 가치를 부여하려고 시도했지만 (그렇지 않게) 이름이 아닌 파일을 잃어 버렸습니다. 호기심이 많은 누군가가 코드에 그러한 불운을 시도하면 파일을 잃어 버릴 것입니다. 또한라는 폴더가 x있으면 명령이 실패합니다. 고마워하지 말고 코드를 수정하십시오. 하나의 라이너를 사용할 필요조차 없습니다. 코드가 너무 좋다고 생각되면 코드 검토에 게시하십시오 .
cdlvcdlv

얼마나 감사한지 .. 나는 파산하지 않았지만, 업데이트하고, 설명하고, 심지어 자동적 인 해결책을 제공했다 ... 행운을 빕니다
T.Todua

0

여기에 좋은 답변을 기반으로 한 다른 배치 스크립트가 있습니다.

제목 시간 초과를 설정하고 심지어 후자에 대해 예약하도록 잠자기 및 \ n 새 줄에 대해 예약 할 수 있습니다

이름을 popup.bat로 지정하고 Windows 경로 폴더에 넣어 PC에서 전체적으로 작동하십시오.

예를 들어 popup Line 1\nLine 22 줄 팝업 상자 ( 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) == true
음이온
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.