文章目录
- 一、背景
- 二、测试数据
- 三、隐藏bat运行窗口方案
- 1. 使用`VBScript`脚本
- 2. 使用`mshta`调用`js`或`vbs`脚本
- 3. 将`bat`编译为`exe`程序
- 4. 使用`任务计划程序`
一、背景
有些程序在执行批处理脚本时,可能会看到dos窗口,或者看到窗口一闪而过。如果批处理脚本执行过程中不需要与用户进行交互,那么为了提升用户体验,防止用户误操作,关闭了正在运行的批处理dos窗口,而导致的一些问题,建议将批处理放到后台(隐藏)运行。
接下来讲总结下都有哪些方式,可以隐藏bat运行时的窗口。(这里不讨论将窗口最小化)
二、测试数据
为了验证bat批处理确实在后台运行,而没有在dos窗口运行,使用如下test.bat
测试脚本
@echo off
echo [%time%]: batch is running.
ping -n 11 127.0.0.1 > run_res.txt
如果批处理没有在后台运行,你将看到dos窗口停留大概10秒的时间,你可以通过生成的 run_res.txt 文件进行判断 dos窗口是否在后台成功运行
三、隐藏bat运行窗口方案
1. 使用VBScript
脚本
可以编写一个VBScript
脚本文件(例如hiderun.vbs
),然后使用该脚本来运行.bat
文件。在VBScript
中,可以使用Shell
对象的Run
方法来运行.bat
文件,并设置窗口风格为不显示。
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "%comspec% /c test.bat", 0
%comspec%
为系统环境变量,其值就是cmd.exe
程序绝对路径。
然后通过双击hiderun.vbs
(或在其他程序中运行这个vbs
脚本),然后test.bat
就在后台运行了(不会闪一下窗口)。
你也可以在另一个bat批处理中调用hiderun.vbs,调用方式如下,但是运行这个bat批处理会闪一下:
@echo f
::cscript解释器
cscript HideRun.vbs //nologo
::wscript解释器
wscript HideRun.vbs //nologo
2. 使用mshta
调用js
或vbs
脚本
可以在原bat
批处理中直接通过mshta
调用js
或vbs
脚本,修改test.bat
具体如下:
@echo off
if "%1"=="h" goto begin
start mshta vbscript:createobject("wscript.shell").run("%~nx0"^&" h",0)^&(window.close) && exit
::start mshta "javascript:new ActiveXObject('WScript.Shell').Run('%~nx0 h',0);window.close();" && exit
:begin
::以下为正常批处理命令,不可含有pause set/p等交互命令
echo [%time%]: batch is running.
ping -n 10 127.0.0.1 > run_res.txt
%0
代表当前运行的批处理文件名,%~nx0
表示将%0
扩展到文件名和扩展名,即当前运行的批处理的绝对路径。关于Wscript.Shell
对象的更多说明,请参考:Wscript.Shell 对象详细介绍
需要注意的是,这种方式运行bat批处理,会闪一下。
3. 将bat
编译为exe
程序
使用第三方工具,将.bat
文件转换为.exe
可执行程序文件,例如使用Bat To Exe Converter
工具,下载地址:https://soft.3dmgame.com/down/202761.html
没使用官网的,你懂的
下载解压后,点击Bat_To_Exe_Converter.exe
,打开直接使用
注意:选项
-exe格式
设置为32位或64位隐形,然后再转换为xxx.exe
文件即可。
然后通过双击生成的xxx.exe
程序(或在其他程序中运行这个exe程序)即可实现在后台运行的效果。
这种方式运行时不会删一下,完全在后台运行。
4. 使用任务计划程序
创建一个定时任务,怎么创建我就不细讲了。其中有两点需要强调下
1)任务的操作
设置中程序或脚本
填写需要运行的test.bat
批处理全路径,添加参数
、起始于
按需填写;
2)任务的常规
-安全选项
中,一定要选择不管用户是否登录都要运行
,任务执行bat批处理时才能在后台运行。(如果选择只有在用户登录时
选项,则还是会弹出dos窗口,我也不明白这是为啥,我的操作系统是Win10)
总结:
- 方案1,内置的VBScript,使用简单
- 方案2,运行bat时会闪一下,其他方案都没这个问题
- 方案3,需要下载第三方工具,将bat转换为exe再执行
- 方案4,定时任务是比较常用的方式,尤其适用于需要定期执行的任务
参考资料:
运行bat时隐藏cmd窗口
Wscript.Shell 对象详细介绍