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

相关推荐
gb421528743 分钟前
负载均衡算法中的加权随机算法
windows·算法·负载均衡
未出道的小弟1 小时前
图形界面应用程序技术栈大全
windows
java叶新东老师13 小时前
解决windows系统下 idea、CLion 控制台中文乱码问题
java·windows·intellij-idea
yanchao_hu14 小时前
数据结构基础内容(第二篇:线性结构)
数据结构·windows
孫治AllenSun18 小时前
【JSqlParser】sql解析器使用案例
数据库·windows·sql
love530love19 小时前
Windows 11 下 Anaconda 命令修复指南及常见问题解决
运维·ide·人工智能·windows·python·架构·conda
暴躁茹1 天前
Windows 系统分辨率切换** 与 **Qt4 无边框窗口管理机制** 的交互
windows·交互
lemoncat81 天前
在Windows下读写Linux EXT文件系统文件
linux·运维·windows
程序视点1 天前
Revo Uninstaller Pro专业版领取:2025最佳Windows软件卸载工具
windows
世界emm1 天前
Windows 10 远程桌面(RDP)防暴力破解BAT脚本
windows