瞧不起什么呢?批处理是简化的脚本语言好吗。
IF语句
if 判断语句
1. 判断文件或文件夹是否存在 if exist 语句
2. 判断某两个字符串是否相等 用 if "字符串1" == ”字符串2“ 语句
3. 判断某两个数值是否相等,用 if 数值1 equ 数值2 语句
4. 判断某个变量是否已经被赋值,用if defined str 语句
判定关系符
判断两个数值之间的大小关系
中文含义 关系符
等于 equ
大于 gtr
大于或等于 geq
小于 lss
小于或等于 leq
不等于 neq
CMD特殊字符
| | 命令管道符 | 将第一条命令的结果作为第二个命令的参数来使用 |
---|---|---|
& | 组合命令 | 当第一个命令执行失败了,后边的命令继续执行 |
&& | 组合命令 | 第一个命令失败后,后边的命令也不会执行 |
|| | 组合命令 | 当一条命令失败后才会执行第二条命令 |
例子
//1.判定文件或文件夹是否存在
@echo off
REM
chcp 65001
cls
if exist F:\ (echo 存在D) else (echo 不存在D)
pause
//2.判定字符串是否相等 /i 忽略大小写
@echo off
if "hello"=="Hello" (echo A) else (echo B)
pause
//3.判定变量是否相等 /p 接受用户参数
@echo off
set /p A="请输入字符串1"
set /p B="请输入字符串1"
if %A%==%B% (echo A) else (echo B)
pause
if实战案例
@echo off
Rem
chcp 65001
cls
if exist F:\it3 (echo 存在) else (md it3 & echo 创建成功)
pause
type nul> 相当于 md
FOR循环
for
格式:FOR [参数] %变量名 IN (相关文件或命令) DO 执行的命令
在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable(双百分号) cmd可用%variabl
for /r F:\ %i in (*.txt) do echo %i //查找F盘所有.txt后缀的文件 并输出出来
初级用法示例
//打印结果值
@echo off
for %%I in (A,B,C) do echo %%I
pause
for语句以逗号为分隔符,把 A,B,C 这个字符串切分成三个元素:A、B和C,
由此决定了do后的语句将会被执行3次;
高级用法示例
//搜索当前目录下有哪些文件,不显示文件夹
@echo off
for %%i in (*.*) do echo "%%i"
pause
//搜索当前目录下所有文本文件
@echo off
for %%i in (*.txt) do echo "%%i"
pause
参数 /F (使用文件解析来处理命令输出、字符串及文件内容。)
参数 /d (参数只能显示当前目录下的目录名字)
这个参数主要用于目录搜索,不会搜索文件,/D 参数只能显示当前目录下的目录名字。
只会搜索指定目录下的目录,不会搜索再下一级的目录。
e.g
for /d %%i in (c:\*) do echo %%i --显示c盘根目录下的所有目录
for /d %%i in (???) do echo %%i --显示当前目录下名字只有1-3个字母的目录
参数 /R (搜索指定路径及所有子目录中与set相符合的所有文件)
格式:FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
此命令会搜索指定路径及所有子目录中与set相符合的所有文件,注意是指定路径及所有子目录。
1、set中的文件名如果含有通配符(?或*),
则列举/R参数指定的目录及其下面的所用子目录中与set相符合的所有文件,无相符文件的目录则不列举。
2、如果set中为具体文件名,不含通配符,则枚举该目录树(即列举该目录及其下面的所有子目录)
(并在后面加上具体的文件名),
而不管set中的指定文件是否存在。
for /r c:\ %%i in (*.exe) do echo %%i
--把C盘根目录,和每个目录的子目录下面全部的EXE文件都列出来了!!!!
e.g
for /r c:\ %%i in (boot.ini) do echo %%i --枚举了c盘所有目录
for /r d:\backup %%i in (1) do echo %%i --枚举d\backup目录
for /r c:\ %%i in (boot.ini) do if exist %%i echo %%i
--很好的搜索命令,列举boot.ini存在的目录
参数 /L (该集表示以增量形式从开始到结束的一个数字序列。可以使用负的 Step)
for /l (1,1,10)
从1开始每次加1 直到加到10
GoTo 语句
goto 执行到这里会跳转
实例
goto variable
:variable
语法
扩展
脚本文件格式
@echo off
pause
中文乱码
//中文乱码是因为编码格式不同,笔记本使用的是UTF8,将其改为ANSI编码方式就行
@echo off
REM
chcp 65001
cls
//开始写脚本
pause