bat编程基础教程

编程知识 更新时间:2023-04-05 17:10:41

0. 简介

批处理(Batch),也称为批处理脚本。是无格式的文本文件,它包含一条或多条命令,应用于DOS和Windows系统中,由DOS或者Windows系统内嵌的命令解释器
(通常是COMMAND. COM或者CMD.EXE)解释运行。类似于Unix中的Shell脚本。通常应用于简化日常或重复性任务。

  1. 批处理文件具有 .bat 或者 .cmd 的扩展名,文件的每一行都是一条DOS命令。可以使用任何文本文件编辑工具创建和修改。

  2. 批处理是一种简单的程序,可以逐行书写在命令行中会用到的各种命令,也可以用 if、for、goto等来控制流程。

  3. 如果需要实现更复杂的应用,可以利用外部程序(系统本身提供的外部命令和第三方提供的工具或者软件)

  4. C:\AUTOEXEC.BAT是每次系统启动时都会自动运行的,可以将每次启动时都要运行的命令放入该文件中。

  5. 大小写不敏感(命令符忽略大小写),编写也十分不规范。

1. 使用方式

在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。

2. 常用语法(cmd命令)

help 提供 Windows 命令的帮助信息。

HELP [command]

    command - 显示该命令的帮助信息。

2.1 目录操作

cd      显示当前目录名或改变当前目录。  
md      创建目录。  
rd      删除一个目录。  
dir     显示目录中的文件和子目录列表。  
tree    以图形显示驱动器或路径的文件夹结构。  

2.2 文件操作

type    显示文本文件的内容。
copy    将一份或多份文件复制到另一个位置。
del     删除一个或数个文件。
move    移动文件并重命名文件和目录。(Windows XP Home Edition中没有)
ren     重命名文件。
replace 替换文件。
attrib  显示或更改文件属性。
find    搜索字符串。
fc      比较两个文件或两个文件集并显示它们之间的不同

2.3 网络操作

ping        进行网络连接测试、名称解析
ftp         文件传输
net         网络命令集及用户管理
telnet      远程登陆
ipconfig    显示、修改TCP/IP设置
msg         给用户发送消息
arp         显示、修改局域网的IP地址-物理地址映射列表

2.4 系统操作

at          安排在特定日期和时间运行命令和程序
shutdown    立即或定时关机或重启
tskill      结束进程
taskkill    结束进程(比tskill高级,但WinXPHome版中无该命令)
tasklist    显示进程列表(Windows XP Home Edition中没有)
sc          系统服务设置与控制
reg         注册表控制台工具
powercfg    控制系统上的电源设置

2.5 其他命令介绍

echo           显示消息,或将命令回显打开或关闭。
rem            记录批处理文件或 CONFIG.SYS 中的注释(批注)。
pause          暂停批处理文件的处理并显示消息。
call           从另一个批处理程序调用这一个。
start          启动单独的窗口以运行指定的程序或命令。
goto           将 Windows 命令解释程序定向到批处理程序中某个带标签的行。
set            显示、设置或删除 Windows 环境变量。

3. 特殊符号

3.1 回显屏蔽 @

表示不显示@后面的命令

:: 我们一般用如下指令,作为批量处理文件的开头
@echo off

3.2 重定向 > , >> , <

> ,>> 将输出信息重定向到指定的设备或文件,系统默认输出到显示器

:: > 如果file.txt存在,就清空输入,不存在就创建
echo abcd > file.txt
:: >> 如果file.txt存在,就追加输入,不存在就创建
echo abcd >> file.txt

< 将输入信息来源重定向为指定的设备或文件

set /p var= < file.txt
echo %var%

3.3 管道符号 |

command_1 | command_2

3.4 转义符 ^ ,%

将特殊符号转化为一般符号,特殊符号指:| & > <

:: 在屏幕输出 test > file.txt
cheo test ^> file.txt

:: 在屏幕输出 100%
cheo 100%%

3.5 逻辑命令符 & , && , ||

&

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

&&

当 && 前面的命令成功执行时,才执行 && 后面的命令,否则不执行

||

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

4. 控制流

4.1 if 语句

更多操作说明可以 help if

(1)if 格式

  1. IF [NOT] ERRORLEVEL number command
  2. IF [NOT] string1 compare-op string2 command
  3. IF [NOT] EXIST filename command

(2)if 说明

NOT:指定只有条件为 false 的情况下,Windows 才应该执行该命令。

ERRORLEVEL number:如果最后运行的程序返回一个等于或大于指定数字的退出代码,指定条件为 true。

string1 compare-op string2:如果指定的文字字符串匹配,指定条件为 true。

EXIST filename:如果指定的文件名存在,指定条件为 true。

command:如果符合条件,指定要执行的命令。如果指定的条件为 false,命令后可跟 ELSE 命令,该命令将在 ELSE 关键字之后执行该命令。

(3)例子

:: 书写格式
:: *********************
:: IF EXIST filename 如果filename文件存在,则执行()里面的语句,否则指向else ()里面语句
:: del filename 删除filename文件
:: echo filename. missing 打印filename. missing
:: *********************
IF EXIST filename. (
    del filename.
) ELSE (
    echo filename. missing.
)

:: ELSE 子句必须出现在同一行上的 IF 之后
:: 如果都放在同一行上
IF EXIST filename. (del filename.) ELSE echo filename. missing

4.2 for 语句

更多操作说明可以 help for

(1)for 格式

FOR %variable IN (set) DO command [command-parameters]

(2)for 说明

%variable:指定一个 单一字母 可替换的参数。

(set):指定一个或一组文件。可以使用通配符。

command:指定对每个文件执行的命令。

command-parameters:为特定命令指定参数或命令行开关。

(3)例子

:: 书写格式
:: *********************
::格式: FOR %%variable IN (set) DO command 
::说明:%%variable是批处理程序里面的书写格式,在DOS中书写为%variable
::无开关
:: *********************
for %%v in (a,"b c",d) do echo %%v

:: *********************
:: 格式:FOR /L %%variable IN (start,step,end) DO command
:: 说明:start为开始计数的初始值,step为每次递增的值,end为结束值。当end小于start时,step需要设置为负数
:: 开关/L
:: *********************
for /l %%v in (1,2,10) do echo %%v

:: *********************
:: 格式:FOR /F ["options"] %%variable IN (set) DO command
:: 说明:set为("string"'command'、file-set)中的一个;
::      options是(eol=c、skip=n、delims=xxx、tokens=x,y,m-n、usebackq)中的一个或多个的组合
		eol=c           - 指一个行注释字符的结尾(就一个)
		skip=n          - 指在文件开始时忽略的行数。
        delims=xxx      - 指分隔符集。这个替换了空格和制表符的默认分隔符集。
        tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。
        				  m-n格式为一个范围。通过 nth 符号指定 mth。
        				  如果符号字符串中的最后一个字符星号,
        				  那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。
        usebackq        - 指定新语法已在下类情况中使用:在作为命令执行一个后引号的字符串
        				  并且一个单引号字符为文字字符串命令并允许在 file-set中使用双引号扩起文件名称。
:: 开关/F
:: *********************
for /f "tokens=1-3 delims=," %%a in ("1,3,7") do echo a=%%a b=%%b c=%%c

4.3 goto

更多操作说明可以 help goto

(1)go to 格式

GOTO label

label 指定批处理程序中用作标签的文字字符串

(2)例子

:label

echo label

goto label1

5 字符串的操作

关于 %variable %%variable %variable% 的介绍

%variable,%%variable 是FOR循环时用的。

%variable 是在DOS中书写,%%variable 是批处理程序里面的书写格式

%variable% 是一个变量的意思

5.1 截取字符串

%variable:~start,size%

@echo off
set var=abcde 12 345

:: start 正数为从前开始截取,负数为从最后开始截取
:: size 不写则默认为截取到末尾

:: 从第1个字符开始,截取5个
rem 截取前5个字符
echo %var:~0,5%

rem 从3个字符开始截取到末尾
echo %var:~2%

rem 截取最后5个字符
echo %var:~-5% 

pause > nul

5.2 替换字符串

%variable:OldCahr=NewChar%

@echo off
set var=abcde

:: 把 cd 替换成 fg   --> abfgd
echo %var:cd=fg%

:: 变量的值还是没有变,如果要改变则需要用set指令
set "var=%var:cd=fg%"

pause > nul

5.3 合并字符串

%variabl1%%variabl2%

@echo off
set var1=abc
set var2=def

:: 合并两字符串
echo %var1%%var2%

:: 合并替换
set "var1=%var1%%var2%"

pause > nul

5.4 扩展字符串

“扩充”这个词汇来自于微软自己的翻译,意思就是对表示文件路径的字符串进行特殊的处理

详细说明 for /?

@echo off
echo 正在运行的这个批处理:
echo 完全路径:%0
echo 去掉引号:%~0
echo 所在分区:%~d0
echo 所处路径:%~p0
echo 文件名:%~n0
echo 扩展名:%~x0
echo 文件属性:%~a0
echo 修改时间:%~t0
echo 文件大小:%~z0
pause > nul

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

6 数值计算

更多详细使用 set /?

批量处理文件使用格式 :set /a expression ,expression代表计算表达式,计算表达式跟C语言里面的表达式基本上完全一致,但是没有自加、自减

@echo off
set /a var=1+2

echo %var%

Q&A

批处理文件编写时是中文,cmd运算时是乱码,怎么解决?

把.bat 或 .cmd 文件保存、编译转换为ANSI编码

更多推荐

bat编程基础教程

本文发布于:2023-04-05 17:10:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/1622dd603ed6193fe89392f498c819a1.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:基础教程   bat

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 46935文章数
  • 14阅读数
  • 0评论数