千家信息网

Windows下bat脚本

发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,bat:批处理(Batch)是一种简化的脚本语言,也称作宏。它应用于DOS和Windows系统中,它是由DOS或者Windows系统内嵌的命令解释器(通常是COMMAND. COM或者CMD.EXE)
千家信息网最后更新 2024年11月18日Windows下bat脚本

bat:

批处理(Batch)是一种简化的脚本语言,也称作宏。它应用于DOS和Windows系统中,它是由DOS或者Windows系统内嵌的命令解释器(通常是COMMAND. COM或者CMD.EXE)解释运行。类似于Unix中的Shell脚本。批处理文件具有.bat或者.cmd的扩展名,其最简单的例子,是逐行书写在命令行中会用到的各种命令。更复杂的情况,需要使用if,for,goto等命令控制程序的运行过程,如同C,Basic等中高级语言一样。如果需要实现更复杂的应用,利用外部程序是必要的,这包括系统本身提供的外部命令和第三方提供的工具或者软件。批处理文件,或称为批处理程序,是由一条条的DOS命令组成的普通文本文件,可以用记事本直接编辑或用DOS命令创建,也可以用DOS下的文本编辑器Edit.exe来编辑。在"命令提示"下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe运行该批处理程序。一般情况下,每条命令占据一行;当然也可以将多条命令用特定符号(如:&;、&&;、|、||等)分隔后写入同一行中;还有的情况就是像if、for等较高级的命令则要占据几行、几十甚至几百行的空间。系统在解释运行批处理程序时,首先扫描整个批处理程序,然后从第一行代码开始向下逐句执行所有的命令,直至程序结尾或遇见exit命令或出错意外退出。

echo [{on|off}] [message]

Sample:@echo off / echo hello world

rem [注释内容]

示例:rem 你好。

::rem还是有区别的,当关闭回显时,rem和::后的内容都不会显示。但是当打开回显时,rem后的内容会显示出来,然而::后的内容仍然不会显示。

Pause 此命令将显示下面的消息:

Press any key to continue. . .(或:请按任意键继续. . .)

call 从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。

call [路径文件名] [标签]]

start 调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。

如:start calc.exe即可打开Windows的计算器

goto 跳转命令。程序指针跳转到指定的标签,从标签后的第一条命令开始继续执行批处理程序

示例:

:1

start

goto 1

注释:会打开很多个窗口(用来整人相当不错)。先用start命令打开窗口,再用goto 1命令转到1标签。注意标签名字前面要加上英文的冒号。

set 显示、设置或删除变量。批处理中的变量是不区分类型的

示例:

set aa=345 ##变量aa的值既可以被视为数字345,也可以被视为字符串345

命令"setlocal enabledelayedexpansion"来开启延迟变量开关

@ 回显屏蔽,表示不显示@后面的命令

>、>>(输出重定向) <(输入重定向)

^(转义符):将特殊字符转为普通字符,特殊符号指:| & > <

示例:

echo ^>

逻辑命令符包括:&;、&&;、||

&:用来连接n个DOS命令,并把这些命令按顺序执行,而不管是否有命令执行失败;

&&:前面的命令成功执行时,执行&&后面的命令,前面命令失败则后面不执行;

||:当前面的命令失败时,执行||后面的命令,否则不执行后面命令;

if语句:

(1)字符串比较

IF [not] string1 compare-op string2 command1 [else command2]

compare-op有以下几类:

== - 等于

EQU - 等于

NEQ - 不等于

LSS - 小于

LEQ - 小于或等于

GTR - 大于

GEQ - 大于或等于

注:选择开关/i则不区分字符串大小写;选择not项,则对判断结果进行逻辑非

示例:if %str1%==%str2% (echo 字符串相同!) else (echo 字符串不相同!)

if /i %str1% LSS %str2% (echo str1^=str2)

交互式:

echo.

set /p choice=是否显示当前时间?(y/n)

if /i not %choice% EQU n echo 当前时间是:%date% %time%

pause>nul

(2)存在判断

IF [NOT] EXIST filename command1 [else command2]

示例:

@echo off

if exist %0 echo 文件%0是存在的!

if not exist %~df0 (

echo 文件夹%~df0不存在!

) else echo 文件夹%~df0存在!

pause>nul

注释:存在判断既可以判断文件也可以判断文件夹、格式严格按上(%0即代表该批处理的全称,%~df0是对%0的修正,只保留了其驱动器盘符和路径)

(3)定义判断(判断变量是否存在)

IF [not] DEFINED variable command1 [else command2]

示例:

@echo off

set var=111

if defined var (echo var=%var%) else echo var尚未定义!

set var=% %

if defined var (echo var=%var%) else echo var尚未定义!

pause>nul

(4)结果判断

for语句:

(1)无开关

FOR %%variable IN (set) DO command

示例:for %%i in (a,"b c",d) do echo %%i

注释:%%variable是批处理程序里面的书写格式,在DOS中书写为%variable,即只有一个百分号(%)

(2)开关(大小写都可)

FOR /L %%variable IN (start,step,end) DO command ##/L可根据start、step、end控制循环次数

FOR /F ["options"] %%variable IN (set) DO command ##/F

##开关/D罗列出所有文件 /R遍历文件夹

字符串:

=========================================

@echo off

set ifo=abcdefghijklmnopqrstuvwxyz0 12 3456789

echo 原字符串(第二行为各字符的序号):

echo %ifo%

echo 1234567890123 45678901234567890123456

echo 截取前5个字符:

echo %ifo:~0,5%

echo 截取最后5个字符:

echo %ifo:~-5%

echo 截取第一个到倒数第6个字符:

echo %ifo:~0,-5%

echo 从第4个字符开始,截取5个字符:

echo %ifo:~3,5%

echo 从倒数第14个字符开始,截取5个字符:

echo %ifo:~-14,5%

pause

=========================================

=========================================

@echo off

echo 当前时间是:%time% 即 %time:~0,2%点%time:~3,2%分%time:~6,2%秒%time:~9,2%厘秒

pause

=========================================

替换字符串

=========================================

@echo off

set aa=伟大的中国!我为你自豪!

echo 替换前:%aa%

echo 替换后:%aa:中国=中华人民共和国%

echo aa = %aa%

set "aa=%aa:中国=中华人民共和国%"

echo aa = %aa%

pause

=========================================

字符串合并

@echo off

set aa=伟大的中国!

set bb=我为你自豪!

echo %aa%%bb%

echo aa=%aa%

echo bb=%bb%

set "aa=%aa%%bb%"

echo aa=%aa%

pause

扩充字符串

=========================================

~I - 删除任何引号("),扩充 %I

%~fI - 将 %I 扩充到一个完全合格的路径名

%~dI - 仅将 %I 扩充到一个驱动器号

%~pI - 仅将 %I 扩充到一个路径

%~nI - 仅将 %I 扩充到一个文件名

%~xI - 仅将 %I 扩充到一个文件扩展名

%~sI - 扩充的路径只含有短名

%~aI - 将 %I 扩充到文件的文件属性

%~tI - 将 %I 扩充到文件的日期/时间

%~zI - 将 %I 扩充到文件的大小

%~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充

到找到的第一个完全合格的名称。如果环境变量名

未被定义,或者没有找到文件,此组合键会扩充到

空字符串

可以组合修饰符来得到多重结果:

%~dpI - 仅将 %I 扩充到一个驱动器号和路径

%~nxI - 仅将 %I 扩充到一个文件名和扩展名

%~fsI - 仅将 %I 扩充到一个带有短名的完整路径名

%~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充

到找到的第一个驱动器号和路径。

%~ftzaI - 将 %I 扩充到类似输出线路的 DIR

=========================================

注:%0是批处理里面的参数,代表当前运行的批处理的完全路径。类似的还有%1-%9,分别代表传递来的第1-9个参数

字符计算

=========================================

() - 分组

! ~ - -一元运算符(逻辑非、按位非、取负)

* / % - 算数运算符(乘、除得商、除得余数,即取余)

+ - - 算数运算符(加、减)

<< >> - 逻辑移位(左移一位、右移一位)

& - 按位"与"

^ - 按位"异"

| - 按位"或"

= *= /= %= += -= - 赋值

&= ^= |= <<= >>=

,-表达式分隔符(set可一次处理多个表达式)

=========================================


0