Windows bat隐藏运行窗口的几种方案

文章目录

一、背景

二、测试数据

三、隐藏bat运行窗口方案

  1. 使用`VBScript`脚本

  2. 使用`mshta`调用`js`或`vbs`脚本

  3. 将`bat`编译为`exe`程序

  4. 使用`任务计划程序`

一、背景

有些程序在执行批处理脚本时,可能会看到dos窗口,或者看到窗口一闪而过。如果批处理脚本执行过程中不需要与用户进行交互,那么为了提升用户体验,防止用户误操作,关闭了正在运行的批处理dos窗口,而导致的一些问题,建议将批处理放到后台(隐藏)运行。

接下来讲总结下都有哪些方式,可以隐藏bat运行时的窗口。(这里不讨论将窗口最小化)

二、测试数据

为了验证bat批处理确实在后台运行,而没有在dos窗口运行,使用如下test.bat测试脚本

bash 复制代码
@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文件,并设置窗口风格为不显示。

vbscript 复制代码
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批处理会闪一下:

vbscript 复制代码
@echo f
::cscript解释器
cscript HideRun.vbs //nologo
::wscript解释器
wscript HideRun.vbs //nologo

2. 使用mshta调用jsvbs脚本

可以在原bat批处理中直接通过mshta调用jsvbs脚本,修改test.bat具体如下:

vbscript 复制代码
@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批处理,会闪一下。

  1. 将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程序)即可实现在后台运行的效果。

​这种方式运行时不会删一下,完全在后台运行。

  1. 使用任务计划程序

创建一个定时任务,怎么创建我就不细讲了。其中有两点需要强调下

1)任务的操作设置中程序或脚本填写需要运行的test.bat批处理全路径,添加参数、起始于按需填写;

2)任务的常规-安全选项中,一定要选择不管用户是否登录都要运行,任务执行bat批处理时才能在后台运行。(如果选择只有在用户登录时选项,则还是会弹出dos窗口,我也不明白这是为啥,我的操作系统是Win10)

总结:

  1. 方案1,内置的VBScript,使用简单
  2. 方案2,运行bat时会闪一下,其他方案都没这个问题
  3. 方案3,需要下载第三方工具,将bat转换为exe再执行
  4. 方案4,定时任务是比较常用的方式,尤其适用于需要定期执行的任务

参考资料:
运行bat时隐藏cmd窗口
Wscript.Shell 对象详细介绍

相关推荐
hairenjing11237 小时前
使用 Mac 数据恢复从 iPhoto 图库中恢复照片
windows·stm32·嵌入式硬件·macos·word
九鼎科技-Leo9 小时前
了解 .NET 运行时与 .NET 框架:基础概念与相互关系
windows·c#·.net
九鼎科技-Leo12 小时前
什么是 ASP.NET Core?与 ASP.NET MVC 有什么区别?
windows·后端·c#·asp.net·mvc·.net
黎明晓月16 小时前
Java之字符串分割转换List
java·windows·list
九鼎科技-Leo16 小时前
在 C# 中,ICollection 和 IList 接口有什么区别?
windows·c#·.net
顾辰呀17 小时前
实现uniapp-微信小程序 搜索框+上拉加载+下拉刷新
前端·windows
Bunny Chen19 小时前
如何缩小PPT演示文稿的大小?
windows·microsoft·powerpoint
如光照20 小时前
Linux与Windows中的流量抓取工具:wireshark与tcpdump
linux·windows·测试工具·网络安全
wwc_boke20 小时前
Linux查看端口占用及Windows查看端口占用
linux·运维·windows
WangMing_X21 小时前
C# 一个工具类让winform自动根据窗体大小缩放所有控件
开发语言·windows·c#