我需要知道如何使用VBScript或KiXtart或任何其他外部脚本/编程语言在批处理脚本中使用制作弹出消息。
我对此毫无头绪......甚至没有起点。
我知道NET SEND
,但在我当前的环境中禁用了Messenger服务。
答案 0 :(得分:47)
msg * "Enter Your Message"
这有帮助吗?
答案 1 :(得分:33)
关于LittleBobbyTable的答案 - NET SEND在Vista或Windows 7上不起作用。它已被MSG.EXE取代
有一个适用于所有Windows版本的原始解决方案 - 可以通过启动一个新的cmd.exe窗口来发送原始弹出消息,该窗口在按下某个键后关闭。
start "" cmd /c "echo Hello world!&echo(&pause"
如果您希望脚本暂停,直到消息框被解除,那么您可以添加/ WAIT选项。
start "" /wait cmd /c "echo Hello world!&echo(&pause"
答案 2 :(得分:16)
更多的方式(在所有这些方法中,脚本等待按钮按下msg.exe
不同。)
1)最怪异和最黑客 - 它使用IEXPRESS创建小型exe,它将创建一个带有单个按钮的弹出窗口(it can create two more types of pop-up messages)。适用于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不需要&#34;外部&#34;这里的jsvascript语言最小化)。应该保存为.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请求,它仍会再次使用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="timedout";
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)虽然msg
解决方案已作为答案发布,但这是一种更好的使用方式:
msg * /self /w "hello world"
/self
是一个未记录的开关,它将强制msg仅将消息发送给当前用户。
答案 3 :(得分:4)
msg * Hello world
对我有用..
答案 4 :(得分:1)
所以,我展示了cmdmsg.bat。
代码是:
@echo off
echo WScript.Quit MsgBox(%1, vbYesNo) > #.vbs
cscript //nologo #.vbs
echo. >%ERRORLEVEL%.cm
del #.vbs
exit /b
还有一个示例文件:
@echo off
cls
call cmdmsg "hi select yes or no"
if exist "6.cm" call :yes
if exist "7.cm" call :no
:yes
cls
if exist "6.cm" del 6.cm
if exist "7.cm" del 7.cm
echo.
echo you selected yes
echo.
pause >nul
exit /b
:no
cls
if exist "6.cm" del 6.cm
if exist "7.cm" del 7.cm
echo.
echo aw man, you selected no
echo.
pause >nul
exit /b
答案 5 :(得分:0)
@echo off
title message
echo what's the password?
set/p "pass=>"
if not %pass% == password goto fail
msg *correct: Correct password!!!
goto end
:fail
msg *wrong: Wrong password!!!
:end
答案 6 :(得分:0)
这很简单,因为我已经创建了几行代码来为你做这个
因此,将变量设置为msg,然后使用此代码。它在VBS消息框中弹出。
CODE:
@echo off
echo %msg% >vbs.txt
copy vbs.txt vbs.vbs
del vbs.txt
start vbs.vbs
timeout /t 1
del vbs.vbs
cls
这只是我提出的它应该适用于您的大多数消息需求,它也适用于Spaces不像一些批处理脚本
答案 7 :(得分:0)
制作信息很容易,方法如下:
首先打开记事本并输入:
msg "Message",0,"Title"
并将其另存为Message.vbs。
现在在批处理文件中输入:
Message.vbs %*
答案 8 :(得分:0)
msg * message goes here
该方法非常简单易用,我相信可以在任何批处理文件中使用。唯一的缺点是#34;对于这种方法,它只能一次显示1条消息,如果有多条消息,它将依次显示每个消息,具体取决于您将它们放入代码中的顺序。还要确保批处理文件中有不同的循环或连续运算符,否则它将自动关闭,只显示此消息。如果你需要一个&#34;安静&#34;背景循环opperator,继承人之一:
pause >nul
这应该保持运行,但是按下按钮后它会关闭。
还要保留所有命令&#34;安静&#34;在运行时,所以他们只是运行并且不显示它们被输入到文件中,只需将以下行放在批处理文件的开头:
@echo off
我希望所有这些提示都有帮助!
答案 9 :(得分:0)