二、bat基础知识 2.1 bat脚本的概念
Bat脚本是指批处理脚本(Batch Script),也可以简称为批处理或批处理文件。批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为.bat或者.cmd。这些命令统称批处理命令,它是一种运行在Windows操作系统上的脚本文件,可以用于执行多个命令或操作的批处理任务。
Bat脚最初用于自动化和批量处理任务,在过去常用于运行一系列命令、复制、移动和删除文件、创建或删除文件夹等日常操作。Bat脚本中每一行都是一条DOS命令,我们可以使用任何文本文件编辑工具创建和修改。要想运行Bat脚本,我们可以直接双击,或者在命令提示下键入批处理文件的名称,系统就会调用Cmd.exe来运行该文件。
Bat脚本通常被用于简化、自动化重复性任务的执行,提高工作效率,减少人工操作。它在日常管理、系统配置、软件安装、数据处理等方面发挥重要作用。Bat脚本的学习和掌握可以帮助用户更好地利用Windows操作系统的强大功能和灵活性。
2.2 bat脚本的创建与编辑
在 Windows 系统中,我们可以使用任何文本编辑器来创建和编辑 Bat 脚本文件,或者在Vscode和IDEA中创建和编辑文件。以下是创建和编辑 Bat 脚本文件的步骤:
①打开一个文本编辑器,例如txt、Notepad++和sublime_txt等。
②在文本编辑器中新建一个空白文件。
③输入 Bat 脚本的命令和指令。其中Bat 脚本的语法和命令语句请参考Bat脚本的官方文档或者本文的第三章。
④输入完命令和指令后whatsapp网页版登录,可以保存文件。请确保选择正确的文件类型和文件名扩展名(.bat)。
⑤选择文件菜单中的"保存"选项或使用快捷键 Ctrl + S。
⑥在保存对话框中whatsapp官网,选择我们要保存的位置和文件名,并确保文件名的后缀加上扩展名".bat",例如"test.bat"。
2.3 bat脚本的执行
要运行一个 Bat 脚本文件,我们可以按照以下步骤进行:
①打开命令提示符(Command Prompt)窗口,如果是不利用ide环境,我们可以在开始菜单中搜索"命令提示符"或"cmd"来找到,如果利用ide环境,我们可以直接在IDEA或者Vscode的terminal中从Windows PowerShell切换到Command Prompt。
②在命令提示符中,使用 cd 命令切换到包含 Bat 脚本文件的目录。例如,如果脚本文件位于 “D:\test” 目录下,可以输入 cd D:\test 来切换到该目录。
③如果想跨目录使用Bat脚本,我们则需要在环境变量窗口里的系统变量中的path变量中配置Bat脚本所在的目录。(按下“win+R”快捷键,打开运行对话框,输入指令:sysdm.cpl,即可快速打开系统属性窗口。)
③输入 Bat 脚本文件的名称,包括文件扩展名 “.bat”。例如,如果脚本文件名为 “script.bat”,则输入 script即可运行bat脚本。
④按下 Enter 键,命令提示符将执行并运行 Bat 脚本文件。脚本中的命令将按顺序执行。
三、bat常用语法命令 3.1 基本内部命令 3.1.1 REM 和 ::
::作用:只能出现在每一行的开头,其后的内容被当作注释
REM作用:可用于任何位置,其后的内容被当作是注释
3.1.2 ECHO 和 @
echo作用1:文本消息输出到命令行窗口或文件中。
作用2:打开回显或关闭回显功能。
例如:在命令行窗口中输出 “Hello, World!”
echo "Hello, World!"
注意:如果想要打印中文且出现乱码,则需要修改文档编码,通过chcp指令可以修改,chcp 65001可以修改文档编码为utf-8
chcp 65001
echo "你好!"
例如:开启或关闭命令的回显
echo [on|off]
如果想关闭“echo off”命令行自身的显示,则需要在该命令行前加上“@”。
@echo off
3.1.3 PAUSE
pause作用:暂停批处理的执行并在屏幕上显示"请按任意键继续..."
3.1.4 SET
set作用:定义变量,包括数字、字符串及数组。
例如:定义数字变量
set /a n=0
例如:定义字符串变量
set s1=hellworld
set s2="Hello World"
如果想要使用字符串变量s2,则可以用%符号来引用变量的值,例如,在Echo命令中可以这样使用变量:
echo %s2%
例如:定义数组变量
set arr=1 2 3 4 5 6
注意事项:
变量名区分大小写。
变量名由字母、数字和下划线组成,不能使用空格或特殊字符。
变量值可以包含任何文本或数字。
变量值可以是一个变量的引用。
可以将多个变量设置在一行上,使用&符号分隔。
使用%时,在Bat脚本中,如果要在文本中显示%字符本身,需要使用%%来转义
1.字符串连接
set str1=Hello
set str2=World
set result=%str1% %str2%
echo %result%
这将输出 Hello World。在批处理中,可以使用 % 符号来引用变量,并使用空格将字符串连接起来。
2.字符串截取
set myvar=abcdef
set substring=%myvar:~0,3%
echo %substring%
这将输出 abc。:~ 后跟的是截取的起始索引和长度。在这个例子中,0,3 表示从索引 0 开始截取,长度为 3。
3.字符串查找
set myvar=abcdef
echo %myvar:~2%
这将输出 cdef。如果省略长度,则从指定的索引开始一直截取到字符串末尾。
4.字符串替换
set myvar=abc123abc
set newvar=%myvar:abc=xyz%
echo %newvar%
3.1.5 ERRORLEVEL
errorlevel作用:获取程序返回码
echo %errorlevel%
每个命令运⾏结束,可以⽤这个命令⾏格式查看返回码。⽤于判断刚才的命令是否执⾏成功,默认值为0,⼀般命令执⾏出错会设 errorlevel 为1。
3.1.6 TITLE
title的作用:设置默认控制台的前景色和背景色,语法如下:
例如:请把cmd窗口的标题改为“我的窗口”
title "我的窗口"
3.1.7 COLOR
color的作用:设置cmd窗口的标题,语法如下:
color [背景色][前景色]
颜⾊属性由两个⼗六进制数字指定 – 第⼀个为背景色,第⼆个则为前景色。每个数字可以为以下任何值之⼀。
例如:请把cmd窗口的背景色改为黑色,前景色改为绿色
color 02
进制数0123456789ABCDEF
颜色
⿊⾊
蓝⾊
绿⾊
湖蓝⾊
红⾊
紫⾊
黄⾊
⽩⾊
灰⾊
淡蓝⾊
淡绿⾊
浅绿⾊
淡红⾊
淡紫⾊
淡黄⾊
亮⽩⾊
3.1.8 IF
if的作用:进行条件或分支的判断。如果指定的条件成立,则执行一个或多个命令,否则执行另一个命令。
下面是 If 命令的基本语法格式:
if [not] condition command
如果 condition 成立,则执行 command。如果使用了 “not” 关键字,则表示条件不成立时执行 command。
以下是一些常用的条件:
equ:如果两个条件相等,则为真。例如,if 5 equ 5。
neq:如果两个条件不相等,则为真。例如,if 5 neq 10。
lss:如果第一个条件小于第二个条件,则为真。例如,if 5 lss 10。
leq:如果第一个条件小于或等于第二个条件,则为真。例如,if 5 leq 5。
gtr:如果第一个条件大于第二个条件,则为真。例如,if 10 gtr 5。
geq:如果第一个条件大于或等于第二个条件,则为真。例如,if 10 geq 10。
3.1.9 GOTO 和 :
goto的作用:与:搭配进而实现跳转执行命令。
例如:同goto命令配合实现命令行窗口打印1到4之间的整数
@echo off
:start
set /a var+=1
echo %var%
if %var% leq 3 GOTO start
pause
3.1.10 FOR
for的作用:在Bat脚本中用于执行循环和遍历操作。它可以遍历文件、文件夹、字符串列表等,并对每个元素执行一组命令。语法如下:
for %%parameter in (set) do command
补充说明:
(1)for、in和do是for语句的关键字,它们三个缺一不可;
(2)%%parameter是一个可以替代的循环变量,可以使用任意名称,在bat的for中使用。如果直接在命令行中使用For命令,需要使用%parameter;
%parameter这个关键字不能在bat中使用,只能在CMD命令下的for中使用。在cmd中:for %parameter in(command1) do command2;
(3)in和do之间括号不能省略,之间的(set) 表示指定要遍历的元素集合的表达式,其可以是文件名、文件夹路径、字符串列表或一些其他的表达式,
变量可以是一个,也可以是多个,每一个字符串或变量,我们称之为一个元素,每个元素之间,用空格键、跳格键、逗号、分号或等号分隔;
(4)command 是要在每个循环迭代中执行的一组命令。
for /f 遍历指定目录下所有的文件和文件夹
for /d 遍历指定目录下所有的文件夹
for /r 遍历指定目录下所有的文件和子文件夹中的文件
例如:遍历文件夹中的文件
for %%f in (D:\path\to\folder\*) do (
echo %%f
REM 在此处执行其他命令
)
此示例中,D:\path\to\folder* 是要遍历的文件夹路径和通配符,%%f 是循环变量,遍历文件夹中的每个文件,并在每次循环中执行一组命令。
例如:遍历文件内容行
for /F "delims=" %%l in (file.txt) do (
echo %%l
REM 在此处执行其他命令
)
此示例中,(file.txt) 是要遍历的文件,%%l 是循环变量,遍历文件的每一行,并在每次循环中执行一组命令。
/F选项指示 For 命令读取文件内容而不是文件名。
例如:遍历字符串列表
for %%s in (apple orange banana) do (
echo %%s
REM 在此处执行其他命令 )
此示例中,apple orange banana是要遍历的字符串列表,%%s是循环变量,遍历列表中的每个元素,并在每次循环中执行一组命令。
3.1.11 FIND
find的作用:在文件中搜索字符串,语法如下:
find [/v][/c][/n][/i][/off[line]] "字符串" [[drive:][path]filename[...]]
以下是字符的具体说明:
/v 显示所有未包含指定字符串的行
/c 仅显示包含字符串的行数
/n 显示行号
/i 搜索字符串时忽略大小写
/off[line] 不要跳过具有脱机属性集的文件
“字符串” 指定要搜索的字符串
[drive:][path]filename 指定要搜索的文件
3.1.12 START
start的作用:批处理中用来调用外部程序的命令,语法如下:
start 外部程序 [参数]
以下是参数的具体说明:
/D path 指定程序的起始目录
/MIN 最小化启动窗口
/MAX 最大化启动窗口
/WAIT 等待启动的程序结束后才继续脚本
/B 在同一窗口中启动程序
/b 隐藏控制台执行程序
该命令将在新进程中运行外部程序,原批处理程序将继续执行
执行运行外部程序则会等待外部程序完成后再继续执行后续指令
示例:start explorer d:\ 将会使用图形界面打开D盘。
3.1.13 CALL
call的作用:在批处理执⾏过程中调⽤另⼀个批处理脚本文件,语法如下:
call 指定批处理文件
例如:调用同目录下的myscript.bat文件
call myscript.bat
3.1.14 type
type的作用:显示文本文件的内容
例如:显示文本文件test.txt里的内容
type test.txt
如果只想输出我们所需要的要查找的内容,则可以改写为如下写法:
type 文件名 | find "关键字"
例如:显示文本文件test.txt里的“huge”
type test.txt | find "huge"
3.1.15 setlocal 与 变量延迟
setlocal enabledelayedexpansion的作用:开启变量赋值延迟
例如案例1:
@echo off
set a=4
set a=5 echo %a%
pause
解释:猜猜这个打印的结果是什么?答案:4。那么为什么是4而不是5呢?
让我们先了解一下批处理运行命令的机制:
批处理读取命令时是按行读取的(另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),在处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值。我们现在分析一下例1,批处理在运行到这句“set a=5 echo %a%”之前,先把这一句整句读取并做了预处理——对变量a赋了值,那么%a%当然就是4了!
而为了能够感知环境变量的动态变化,批处理设计了变量延迟。简单来说,在读取了一条完整的语句之后,不立即对该行的变量赋值,而会在某个单条语句执行之前再进行赋值,也就是说“延迟”了对变量的赋值。
那么如何开启变量延迟呢?变量延迟又需要注意什么呢?举个例子说明一下:
例如案例2:
@echo off
setlocal enabledelayedexpansion
set a=4
set a=5 echo !a!
pause
解释:启动了变量延迟,得到了正确答案。变量延迟的启动语句是“setlocal enabledelayedexpansion”,并且变量要用一对叹号“!!”括起来(注意要用英文的叹号),否则就没有变量延迟的效果。
分析一下例2,首先“setlocal enabledelayedexpansion”开启变量延迟,然后“set a=4”先给变量a赋值为
4,“set a=5 echo !a!”这句是给变量a赋值为5并输出(由于启动了变量延迟,所以批处理能够感知到动态变化,即不是先给该行变量赋值,而是在运行过程中给变量赋值,因此此时a的值就是5了)。
3.1.16 mshta命令
mshta命令作用:mshta可以调用vb脚本和js脚本
例如:
mshta vbscript:window.execScript("alert('hello world!');","javascript")(window.close)
mshta javascript:window.execScript("msgBox('hello world!')(window.close)","vbs")
mshta vbscript:msgbox("弹窗单行显示内容",65,"弹窗的标题")(window.close)
mshta vbscript:CreateObject("Wscript.Shell").popup("弹窗内容",7,"标题",64)(window.close)
::连续弹二个信息框
mshta vbscript:execute("msgbox ""one BOX"":msgbox ""two BOX"":window.close")
3.2 常用特殊符号命令 3.2.1 @命令行回显屏蔽符
@的作用:用在任何命令前面,实现关闭当前行的回显
例如:
ECHO OFF可以关闭掉整个批处理命令的回显,但不能关掉ECHO OFF这个命令,
现在我们在ECHO OFF这个命令前加个@,就可以达到所有命令均不回显的要求
3.2.2 %批处理变量引导符
%的作用:变量引导
这个百分号严格来说是算不上命令的,它只是批处理中的参数而已
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*为命令⾏传递给批处理的参数
%0 批处理⽂件本⾝,包括完整的路径和扩展名
%1 第⼀个参数
%9 第九个参数
%* 从第⼀个参数开始的所有参数
参数%0具有特殊的功能,可以调用批处理自身,以达到批处理本身循环的目的,也可以复制文件自身等等。
例:最简单的复制文件自身的方法
copy %0 d:\\wind.bat
小技巧:添加行内注释
%注释内容%(可以用作行内注释,不能出现重定向符号和管道符号)
3.2.3 > 重定向符
>的作用:传递并且覆盖,将运行的结果传递到后面的范围(后边可以是文件,也可以是默认的系统控制台)
例如:
使用命令:echo hello >1.txt将建立文件1.txt,内容为”hello “(注意行尾有一空格)
使用命令:echo hello>1.txt将建立文件1.txt,内容为”hello“(注意行尾没有空格)
3.2.4 >>重定向符
>>的作用:其作用与>相似,但是差异点在于>是在覆盖,而>>是传递并在文件的末尾追加
3.2.5 |命令管道符
格式:第一条命令 | 第二条命令 [| 第三条命令...]
将第一条命令的结果作为第二条命令的参数来使用,记得在unix中这种方式很常见。
例如:
dir c:\\|find \"txt\"
以上命令是:查找C:\\所有,并发现TXT字符串。
3.2.6 其他符号命令
(1)^的作用:^是对特殊符号<,>,的前导字符,在命令中他将以上3个符号的特殊功能去掉,仅仅只把他们当成符号而不使用他们的特殊意义。
例如:
echo test ^>1.txt
运行结果实际是打印了test >1.txt,不要误以为会把test覆盖写入到1.txt文件中
注意:如果把>放到行尾,其会让回车符失效,从而达到了续行的作用。
(2)&&的作用:这个符号允许在一行中使用2个以上不同的命令,当第一个命令执行失败了,也不影响后边的命令执行
语法:第一条命令 && 第二条命令 [&& 第三条命令...]
这里两边的命令是顺序执行的,从前往后执行。
例如:
dir z:\\ && dir y:\\ && dir c:\\
以上命令会连续显示z,y,c盘的内容,不理会该盘是否存在
(3)&的作用:同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令
语法:第一条命令 & 第二条命令 [& 第三条命令...]
这个命令和上边的类似,但区别是,第一个命令失败时,后边的命令也不会执行
例如:dir z:\\ & dir y:\\ & dir c:\\
以上命令如果dir z:\\失败,则后面的命令也不会执行
(4)||的作用:当一条命令失败后才执行第二条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令
语法:第一条命令 || 第二条命令 [|| 第三条命令...]
(5), 的作用:逗号相当于空格,在某些情况下“,”可以用来当做空格使
(6);的作用:当命令相同时,可以将不同目标用;来隔离,但执行效果不变,如执行过程中发生错误,则只返回错误报告,但程序仍会执行
例如:
dir c:\\;d:\\;e:\\;z:\\
以上命令相当于
dir c:\\
dir d:\\
dir e:\\
dir f:\\
(7)()的作用:使括号中的多行命令,这些命令将被看成一个整体,视为一条命令行
(8)!的作用:在变量延迟问题中,用来表示变量,即%var%应该表示为!var!
**********************************重要提示:****************************************
组合命令和重定向命令一起使用必须注意优先级
管道命令的优先级高于重定向命令,重定向命令的优先级高于组合命令
**********************************重要提示:****************************************
3.3 网络与系统管理命令 命令说明
tasklist
作用:查看当前计算机中运行的任务列表
taskkill
作用:结束进程
shutdown
作用:立即或定时关机或重启
ping
作用:进行网络连接测试、名称解析,如ping www.baidu.com
sc
作用:执行该条语句后会立即执行之后的代码,不会等待停止/启动的过程,如sc start MySQL和sc stop MySQL和
net
作用:关闭/启动MySQL服务,等待停止/启动的过程,完成后执行之后的代码
ipconfig
作用:显示、修改TCP/IP设置
ftp
作用:文件传输
3.4 文件管理命令 命令说明
mkdir
作用:创建新的文件夹 。例如创建test文件夹:mkdir test
copy
作用:可以复制一个或多个文件到指定目录。例如把C盘文件夹复制到D盘backup中:copy C:\file.txt D:\backup\
move
作用:将文件移动到指定目录。例如把C盘文件移到到D盘backup中:move C:\file.txt D:\backup\
del
作用:可以删除一个或多个文件。例如删除 C:\file.txt 文件:del C:\file.txt
for /d
作用:可以循环遍历文件夹。for /d %%f in (C:\folder*) do (echo %%f REM 在此处执行其他命令)
ren
作用:可以重命名一个或多个文件。例如将 C:\oldname.txt 文件重命名为 newname.txt:ren C:\oldname.txt newname.txt
四、bat常见应用与实战
在本章节里,我将给大家介绍一些bat的应用案例,加深大家对bat相关知识的了解。这些应用案例中的脚本编写将会或多或少的直接应用到第三章中介绍的常用语法命令,然后案例整个的实现也会运用到第二章中介绍的bat脚本的创建、编辑、执行的相关知识whatsapp web,大家如果有遗忘,就直接回顾第二、三章即可。
4.1 命令行快速打开网站
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。