一、批处理最小化运行的几种方法:
1) 最小化运行批处理方法一:一般
mode con cols=20 lines=1
if exist "Temp.bat" goto Start
>Temp.bat echo start /min "" "%~nx0"^&exit
start /min Temp.bat&exit
:Start
del "Temp.bat">nul
pause
exit
注释:
假设上面内容被保存在“min.bat”文件中
(1)mode con cols=14 lines=1(这一行可以不要)
设置cmd屏幕缓冲区宽度为14字符,行数为1行
(2)>Temp.bat echo start /min "" "%~nx0"^&exit
在当前目录生成Temp.bat文件,文件内容为“start /min "" "min.bat"&exit”。“^”为转义符,确保可正常把符号“&”写入到文本文件。“%~nx0”在运行时会由其所在的批处理文件的文件名替换(本例中被替换为“min.bat”)。
(3)start /min Temp.bat & exit (由这里开始接下来的命令都在最小化的CMD中执行)
在新的最小化CMD窗口中运行“Temp.bat”并退出一开始运行min.bat的CMD窗口。
(4)Temp.bat最小化调用min.bat
此时Temp.bat已经存在,执行“:Start”行之后的内容。
2) 最小化运行批处理方法二:好
只一行代码,让批处理最小化运行自己
if not "%~1"=="p" start /min cmd.exe /c %0 p&exit
加在任意批处理开头,不过这种代码很危险,我就忘在%0后加个p,结果。。。!
解释一下这段代码的意思:
1.if not "%~1"=="p"——如果此批处理的第一个参数“%~1”不为“p”,则...
2.start /min cmd.exe /c——最小化执行cmd.exe后关闭(为什么要用cmd.exe来间接执行%0?目的是执行不以exit结束的批也能自动退出)
3.%0 p——批处理本身,带参数“p”(任意参数即可)
4.&exit——不用解释了吧!
作用是:最小化运行自身(一次!),本批处理退出,并且不会无限运行!
3)最小化运行批处理方法三:(好)
@echo off&&mode con cols=20 lines=1 (这句最好不要)
%1 %2
start /min /i "" "%~nx0" goto min&&goto :eof
:min
Rem 下面写代码
批处理隐藏窗口运行的几种方法:
如果要隐藏执行批处理的话,批处理程序中不能包含set /p、pause等交互命令,否则批处理无法执行完整!
1) 隐藏窗口运行批处理方法一:最好,支持内存系统
@echo off
if "%1" neq "1" (
>"%temp% mp.vbs" echo set WshShell = WScript.CreateObject^(^"WScript.Shell^"^)
>>"%temp% mp.vbs" echo WshShell.Run chr^(34^) ^& %0 ^& chr^(34^) ^& ^" 1^",0
start /d "%temp%" tmp.vbs
exit
)
::从这里开始,就是你的批处理代码了,DOS黑框一闪而过,转到后台运行了
pause
::你会在任务管理器看到有一个隐藏窗口的CMD进程
2) 隐藏窗口运行批处理方法二:一般
运行bat时隐藏cmd窗口的方法 可以编辑一个vbs脚本,在其中以隐藏窗口运行批处理程序。
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c 批处理程序名",vbhide
将上面代码拷贝到记事本中,保存为"runbat.vbs"或者其它的名字(扩展名必须是.vbs),然后点击运行生成的脚本runbat.vbs,即可隐藏运行指定的批处理程序。
这个vbs脚本也可以在bat环境中直接调用,达到隐藏bat自身的目的。
3) 隐藏窗口运行批处理方法三:一般
Set ws = CreateObject("Wscript.Shell")
wscript.sleep 1200 ws.run "cmd /c start winrar.exe",vbhide
wscript.sleep 2200 ws.run "cmd /c start msimn.exe",vbhide
wscript.sleep 1200 ws.run "cmd /c start iexplore.exe",vbhide
4) 隐藏窗口运行批处理方法四:
缺点:会看到一个窗口一闪而逝。优点:简单,直接添加即可。
@echo off
if "%1"=="h" goto begin
start mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
::以下为正常批处理命令,不可含有pause set/p等交互命令
pause
5) 隐藏窗口运行批处理方法五:
缺点:调用麻烦点。优点:基本看不到痕迹(非绝对的,指一般用户)
HideRun.vbs
CreateObject("WScript.Shell").Run "cmd /c D:/test.bat",0
其中D:/test.bat是你的批处理路径
另一思路为把bat转换成vbs,然后vbs生成一个临时bat文件,然后WScript.Shell.Run隐藏启动这个临时bat。
HideRun.bat
echo CreateObject("WScript.Shell").Run "cmd /c D:/test.bat",0>$tmp.vbs
cscript.exe /e:vbscript $tmp.vbs
del $tmp.vbs
这个批处理其实不能使其批处理本身隐藏,但是下面大部分隐藏调用批处理的原理和基础。
HideRun.js
new ActiveXObject('WScript.Shell').Run('cmd /c D:/Test.bat',0);
用Javascript有什么好处呢?js的字符串变量可以用单引号,从而方便命令行作为参数调用,而且js很好的支持多行语句用 ; 分隔写成一行。要注意的是:js要区分大小写,方法
必须用括号,结尾必须有分号。所以就成了下面的命令:
mshta "javascript:new ActiveXObject('WScript.Shell').Run('cmd /c D:/test.bat',0);window.close()"
通常系统管理员会向用户端推送一些脚本并运行,或者拷贝批处理文件到客户端由用户自己运行。但是大部分脚本在运行时会弹出黑色背景的DOS窗口,这会让不少用户不知所措,甚至误操作关闭正在运行的窗口。好在批处理文件的DOS窗口是可以隐藏的。
6)隐藏窗口运行批处理方法六:
用快捷方式,如果要使一个批处理本身隐藏,可以创建一个bat的快捷方式然后修改快捷方式中的相关路径即可隐藏启动你的批处理。可以用vbs来建立一个 .lnk,其实用批处理也行(先echo一个
vbs出来)
7) 隐藏窗口运行批处理方法七:
利用系统服务,可以建立一个系统服务然后启动这个服务来启动批处理。缺点是启动服务较慢,需要管理员权限
runassrv add /cmdline:"C:/Windows/System32/cmd.exe /c D:/test.bat" /name:"mysrv"
net start mysrv
隐藏窗口运行批处理方法八:
利用at计划任务,用at可以建立一个计划任务,在不输入 /interactive 参数可以后台运行。但是建使用at必须有管理员权限
at 09:10 "cmd /c D:/Test.bat"
然后在 9:10 系统就会自动后台以SYSTEM权限运行这个bat
9) 隐藏窗口运行批处理方法九:
利用ftype文件关联
ftype batfile=C:/Windows/System32/mshta "javascript:new ActiveXObject('WScript.Shell').Run('cmd /c%1',0);window.close();"
10) 隐藏窗口运行批处理方法十:
编译成可执行文件,不少方法可以实现,可以直接利用的工具有bat2exe,百度搜索一大把。
二、批处理窗口自定义:
窗口大小定义:
语法格式:
MODE con: COLS=[窗口宽度] LINES=[窗口高度]
窗口宽度取值:≥20,高度取值:1≤h≤300
示例:
MODE con: COLS=35 LINES=17
三、批处理窗口前景色和背景色随机变换:
代码:
@echo off&setlocal enabledelayedexpansion
set "b=0123456789abcdef"&set "f=0123456789abcdef"&set /a r=%random%%%16&set /a s=%random%%%16
color !f:~%s%,1!!b:~%r%,1!
::下面写代码
教程完毕,讲到这儿,想必大家对批处理也都已经非常地熟悉了,批处理更多强大的你也能够挖掘出来了,整装待发,尽情的遨游在批处理的海洋里吧!