[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 在批处理文件输出一个弹窗,但是不会在任务栏显示

请问下这个还有什么需要修改/缩减/优化的吗?(弄这个的我到底有多闲)
exe是用Bat_To_Exe_Converter 生成的
将CmdMsgbox_install.bat生成exe时注意打包CmdMsgBox.exe,且勾选工作目录为临时目录

[attach]10643[/attach]主程序exe下载
[attach]10644[/attach]安装版exe下载

CmdMsgBox Code
  1. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2. :hta Cmd MsgBox
  3. ::
  4. :: 作者:Neko Piao, 2017-05-21. 版本 %CmdMsgBoxver%
  5. ::
  6. :: 功能:在批处理文件输出一个弹窗,但是不会在任务栏显示
  7. ::       仅测试于 Win10.
  8. ::
  9. :: 参数:%1~%9 输出的内容(最后一个为标题)
  10. ::
  11. :: 第一个参数为-? 则显示帮助
  12. ::
  13. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  14. @echo off
  15. if /i not "%~nx0"=="CmdMsgbox.exe" (echo 请将%~nx0重命名为CmdMsgbox.exe再执行&echo 按任意键退出&pause>nul&exit)
  16. set CmdMsgBoxver=1.170524.0109
  17. setlocal ENABLEEXTENSIONS
  18. set parameter0=0
  19. set parameter1=%1
  20. set parameter2=%2
  21. set parameter3=%3
  22. set parameter4=%4
  23. set parameter5=%5
  24. set parameter6=%6
  25. set parameter7=%7
  26. set parameter8=%8
  27. set parameter9=%9
  28. set str=%parameter1%
  29. if defined str (
  30.     set /a parameter0=%parameter0%+1
  31. ) else (goto:keeptoPrt01)
  32. set str=%parameter2%
  33. if defined str (
  34.     set /a parameter0=%parameter0%+1
  35. ) else (goto:keeptoPrt01)
  36. set str=%parameter3%
  37. if defined str (
  38.     set /a parameter0=%parameter0%+1
  39. ) else (goto:keeptoPrt01)
  40. set str=%parameter4%
  41. if defined str (
  42.     set /a parameter0=%parameter0%+1
  43. ) else (goto:keeptoPrt01)
  44. set str=%parameter5%
  45. if defined str (
  46.     set /a parameter0=%parameter0%+1
  47. ) else (goto:keeptoPrt01)
  48. set str=%parameter6%
  49. if defined str (
  50.     set /a parameter0=%parameter0%+1
  51. ) else (goto:keeptoPrt01)
  52. set str=%parameter7%
  53. if defined str (
  54.     set /a parameter0=%parameter0%+1
  55. ) else (goto:keeptoPrt01)
  56. set str=%parameter8%
  57. if defined str (
  58.     set /a parameter0=%parameter0%+1
  59. ) else (goto:keeptoPrt01)
  60. set str=%parameter9%
  61. if defined str (
  62.     set /a parameter0=%parameter0%+1
  63. ) else (goto:keeptoPrt01)
  64. :keeptoPrt01
  65. if "%parameter1%"=="-?" (GOTO:TheHelp)
  66. if "%parameter1%"=="" (GOTO:vermsg)
  67. if /i "%parameter1%"=="vernum" (GOTO:vernum) else (goto:TheStart)
  68. :vernum
  69. Echo %CmdMsgBoxver%
  70. goto:TheEnd
  71. :vermsg
  72. Echo.Cmd Msgbox [版本 %CmdMsgBoxver%]
  73. Echo.BY:Neko Piao 保留所有权利。
  74. goto:TheEnd
  75. :TheHelp
  76. Echo. 弹窗提示消息,同时暂停
  77. Echo. 最后一个参数自动将成为弹窗标题
  78. Echo.
  79. Echo. %~n0 ["Msg1"] ["Msg2"] ......
  80. Echo.
  81. Echo. 例:
  82. Echo. %~n0 "第一行" "第二行" "标题"
  83. Echo.
  84. Echo. 注: 因技术原因,第一个变量
  85. Echo. 即第一行不可包含空格或其他可能产生bug的字符
  86. Echo. 但除去第一行以外的都[应该]可以使用各种字符.
  87. Echo. 少部分冲突字符依然不可用.
  88. Echo.
  89. Echo.
  90. Echo. 若要显示当前CmdMsgBox版本信息,请键入不带参数的 CmdMsgBox
  91. goto:eof
  92. :TheStart
  93. set inoutfiletimename=%time:~0,2%.%time:~3,1%%time:~4,1%.%time:~6,1%%time:~7,1%.%time:~9,1%%time:~10,1%
  94. Echo.^<html^>>%temp%\CmdMsgbox_"%inoutfiletimename%".hta
  95. Echo.^<head^>>>%temp%\CmdMsgbox_"%inoutfiletimename%".hta
  96. Echo.^<title^>%temp%\CmdMsgbox_"%inoutfiletimename%".hta^</title^>>>%temp%\CmdMsgbox_"%inoutfiletimename%".hta
  97. Echo.^<script type="text/vbscript"^>>>%temp%\CmdMsgbox_"%inoutfiletimename%".hta
  98. ::核心部分
  99. ::弹窗语句输出判断
  100. ::利用用户输入的参数判断剩余信息的读取
  101. Set parameter_num_sum=%parameter0%
  102. set parametertemp=0
  103. :Start
  104. ::输出语句小于最大语句标签数
  105. if %parametertemp% LSS %parameter_num_sum% (set /a parametertemp=%parametertemp%+1) else (goto:parameterEnd)
  106. set parametermsgtemp=parameter%parametertemp%
  107. call:%parametermsgtemp%
  108. goto:Start
  109. :parameter1
  110. >>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p="MSGBox " <nul
  111. >>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p="%parameter1%" <nul
  112. goto:eof
  113. :parameter2
  114. Call:TitleaEQU
  115. >>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p="%parameter2%" <nul
  116. goto:eof
  117. :parameter3
  118. Call:TitleaEQU
  119. >>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p="%parameter3%" <nul
  120. goto:eof
  121. :parameter4
  122. Call:TitleaEQU
  123. >>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p="%parameter4%" <nul
  124. goto:eof
  125. :parameter5
  126. Call:TitleaEQU
  127. >>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p="%parameter5%" <nul
  128. goto:eof
  129. :parameter6
  130. Call:TitleaEQU
  131. >>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p="%parameter6%" <nul
  132. goto:eof
  133. :parameter7
  134. Call:TitleaEQU
  135. >>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p="%parameter7%" <nul
  136. goto:eof
  137. :parameter8
  138. Call:TitleaEQU
  139. >>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p="%parameter8%" <nul
  140. goto:eof
  141. :parameter9
  142. Call:TitleaEQU
  143. >>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p="%parameter9%" <nul
  144. goto:eof
  145. :TitleaEQU
  146. if %parametertemp% EQU %parameter_num_sum% (>>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p=",16+0," <nul )
  147. if %parametertemp% LSS %parameter_num_sum% (>>%temp%\CmdMsgbox_"%inoutfiletimename%".hta set /p=" & vbCrLf & " <nul )
  148. goto:eof
  149. :parameterEnd
  150. Echo.>>%temp%\CmdMsgbox_"%inoutfiletimename%".hta
  151. Echo.self.close()>>%temp%\CmdMsgbox_"%inoutfiletimename%".hta
  152. Echo.^</script^>>>%temp%\CmdMsgbox_"%inoutfiletimename%".hta
  153. Echo.^</head^>>>%temp%\CmdMsgbox_"%inoutfiletimename%".hta
  154. Echo.^</html^>>>%temp%\CmdMsgbox_"%inoutfiletimename%".hta && Call %temp%\CmdMsgbox_"%inoutfiletimename%".hta
  155. Del %temp%\CmdMsgbox_"%inoutfiletimename%".hta
  156. endlocal
  157. goto:EOF
  158. :TheEnd
  159. endlocal & goto:EOF
  160. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
复制代码
CmdMsgbox_install Code
  1. @echo off
  2. ::call:UAC_Check
  3. Call:installverload
  4. Call:installnamecheck
  5. Call:firstinstallcheck
  6. Call:Sysverload
  7. Call:installver_or_Sysver_check
  8. Call:userselect
  9. exit
  10. ::名称检查
  11. :installnamecheck
  12. ::if not "%~nx0"=="CmdMsgbox_install_%instaver01%.%instaver02%.%instaver03%.exe" (echo 请将%~nx0重命名为CmdMsgbox_install_%instaver01%.%instaver02%.%instaver03%.exe再执行&echo 按任意键退出&pause>nul&exit) else (echo.)
  13. echo 您正在安装CmdMsgbox %instaver01%.%instaver02%.%instaver03%
  14. goto:eof
  15. :firstinstallcheck
  16. ::当磁盘不存在,则安装,否则检查版本后安装
  17. if not exist %ComSpec:~0,-7%CmdMsgbox.exe (call:install&call:installcheck&exit)
  18. goto:eof
  19. :installverload
  20. if not exist .\CmdMsgbox.exe echo 没有找到安装文件,按任意键退出.&pause>nul&exit
  21. for /f "tokens=1-3 delims=." %%a in ('.\CmdMsgbox verNum') do (
  22. set "instaver01=%%a"
  23. set "instaver02=%%b"
  24. set "instaver03=%%c"
  25. )
  26. set instaver00=%instaver01%%instaver02%%instaver03%
  27. goto:eof
  28. :Sysverload
  29. for /f "tokens=1-3 delims=." %%a in ('%ComSpec:~0,-7%CmdMsgbox verNum') do (
  30. set "SysCmdMsgboxver=%%a%%b%%c"
  31. set "SysCmdMsgboxver01=%%a"
  32. set "SysCmdMsgboxver02=%%b"
  33. set "SysCmdMsgboxver03=%%c"
  34. )
  35. goto:eof
  36. :installver_or_Sysver_check
  37. ::如果安装版本大于则直接覆盖安装
  38. if "%instaver00%" GTR "%SysCmdMsgboxver%" (call:install&call:installcheck&exit)
  39. if "%instaver00%" EQU "%SysCmdMsgboxver%" (call:uninstallselect&exit)
  40. goto:eof
  41. :userselect
  42. cls
  43. ECHO 您要安装的版本%instaver01%.%instaver02%.%instaver03%低于现有版本%SysCmdMsgboxver01%.%SysCmdMsgboxver02%.%SysCmdMsgboxver03%
  44. echo 是否继续?(Y/N)
  45. set /p YN=
  46. if /i "%YN%"=="Y" (del %ComSpec:~0,-7%CmdMsgbox.exe&call:install&call:installcheck&exit)
  47. if /i "%YN%"=="N" (CmdMsgbox 2 "用户取消" "安装失败"&exit) else (cls&echo 输入有误,请重新输入&goto:userselect)
  48. goto:eof
  49. :install
  50. move CmdMsgbox.exe %ComSpec:~0,-7% >nul 2>nul
  51. goto:eof
  52. :installcheck
  53. if not exist %ComSpec:~0,-7%CmdMsgbox.exe (Echo.安装失败,拷贝进程未如预期进行 &Echo. 按任意键退出&pause>nul&exit)
  54. set SysCmdMsgboxverlast=%SysCmdMsgboxver01%.%SysCmdMsgboxver02%.%SysCmdMsgboxver03%
  55. call:Sysverload
  56. set SysCmdMsgboxvernow=%instaver01%.%instaver02%.%instaver03%
  57. echo 安装成功,请查看弹窗,点击确认以完成安装.
  58. CmdMsgbox "安装成功" "之前版本:%SysCmdMsgboxverlast%" "现在版本:%SysCmdMsgboxvernow%" "请在Cmd中输入[CmdMsgbox -?]查看使用帮助" "安装成功"
  59. exit
  60. goto:eof
  61. :uninstallselect
  62. set UninstallCode=Uninstall%random%%random%%random%%random%%random%%random%%random%%random%%random%
  63. echo %UninstallCode:~1%| clip
  64. cls
  65. ECHO 您要&echo.     安装的版本 %instaver01%.%instaver02%.%instaver03%&echo.&echo.     等于      ^|^|&echo.&echo     现有  版本 %SysCmdMsgboxver01%.%SysCmdMsgboxver02%.%SysCmdMsgboxver03%&echo ----------------------------------------------------------------------
  66. echo 继续安装请输入[R]
  67. echo 退出安装请输入[Q]
  68. echo 删除安装请输入[%UninstallCode%]
  69. set /p RQU=
  70. if /i "%RQU%"=="R" (del %ComSpec:~0,-7%CmdMsgbox.exe&call:install&call:installcheck&exit)
  71. if /i "%RQU%"=="Q" (CmdMsgbox 2 "用户取消" "安装失败"&exit)
  72. if /i "%RQU%"=="%UninstallCode%" (call:uninstall&exit) else (cls&echo 输入有误,请重新输入&goto:uninstallselect)
  73. goto:eof
  74. :uninstall
  75. call:Sysverload
  76. del %ComSpec:~0,-7%CmdMsgbox.exe
  77. if not exist %ComSpec:~0,-7%CmdMsgbox.exe(
  78. .\CmdMsgbox "删除成功" "CmdMsgbox %SysCmdMsgboxver01%.%SysCmdMsgboxver02%.%SysCmdMsgboxver03%已从您的系统文件中移除" "删除成功" & exit
  79. ) else (
  80. CmdMsgbox "" "未预期错误:删除失败" "建议重启再试" "或重启后手动至%ComSpec:~0,-7%目录删除CmdMsgbox.exe" "删除失败" & exit
  81. )
  82. goto:eof
  83. :UAC_Check
  84. Rem 创建文件路径
  85. set TempFile_Name=%SystemRoot%\System32\BatTestUACin_SysRt%Random%.batemp
  86. Rem 写入文件
  87. ( echo "BAT Test UAC in Temp" >%TempFile_Name% ) 1>nul 2>nul
  88. Rem 判断写入是否成功
  89. if exist %TempFile_Name% (
  90. echo 正在以管理员身份运行
  91. ) else (
  92. echo 请以管理员身份重新启动,按任意键退出&pause>nul&exit
  93. )
  94. Rem 删除临时文件
  95. del %TempFile_Name% 1>nul 2>nul
  96. goto:eof
复制代码

返回列表