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 对象详细介绍

相关推荐
我是苏苏3 小时前
C#高级:常用的扩展方法大全
java·windows·c#
hshpy5 小时前
start using Python 3.11 after installation
windows·python·python3.11
小奥超人7 小时前
合并压缩ZIP压缩包,分享两种方法!
windows·经验分享·zip·压缩包解密·办公技巧
XuanRanDev16 小时前
【音视频处理】FFmpeg for Windows 安装教程
windows·ffmpeg·音视频
源代码杀手20 小时前
【以音频软件FFmpeg为例】通过Python脚本将软件路径添加到Windows系统环境变量中的实现与原理分析
windows·python·音视频
Java诗人DK21 小时前
windows 安装 mysql 教程
数据库·windows·mysql
曙曙学编程1 天前
基础项目实战——学生管理系统(c++)
开发语言·c++·windows
vortex51 天前
Windows 靶机常见服务、端口及枚举工具与方法全解析:SMB、LDAP、NFS、RDP、WinRM、DNS
windows·网络安全·渗透测试
程序设计实验室1 天前
使用twinkle-tray快捷调整多个显示器的亮度
windows
瑶山1 天前
Windows中本地组策略编辑器gpedit.msc打不开/微软远程桌面无法复制粘贴
windows·远程·gpedit.msc