Bat脚本 流程控制
条件判断 if
字符串比较
@echo off
set input=admin
if "%input%"=="admin" (
echo 欢迎管理员!
) else (
echo 普通用户
)
注意:用双引号包围变量和比较值,可防止变量为空时语法错误。
忽略大小写比较 /i
@echo off
if /i "ABC"=="abc" (
echo 忽略大小写,相等!
)
数值比较
| 操作符 | 含义 |
|---|---|
equ |
等于(==) |
neq |
不等于 |
lss |
小于 |
leq |
小于等于 |
gtr |
大于 |
geq |
大于等于 |
@echo off
set score=85
if %score% geq 60 (
echo 及格
) else (
echo 不及格
)
注意:只有 == 可以使用符号,其他操作符只能使用英文简写。
判断文件/目录是否存在 exist
@echo off
if exist "C:\Windows\notepad.exe" (
echo 记事本存在
) else (
echo 记事本不存在
)
if not exist "C:\Backup" (
mkdir C:\Backup
echo 已创建 Backup 目录
)
判断变量是否已定义 defined
@echo off
if defined MYVAR (
echo MYVAR 已定义,值为 %MYVAR%
) else (
echo MYVAR 未定义
)
注意:if defined 中变量名不加 %。
多分支 else if
@echo off
set /p score=请输入分数:
if %score% geq 90 (
echo 优秀
) else if %score% geq 80 (
echo 良好
) else if %score% geq 60 (
echo 及格
) else (
echo 不及格
)
跳转 goto
goto 命令将执行流程跳转到指定的标签位置。
@echo off
echo 开始执行
goto :skip
echo 这行不会被执行
:skip
echo 跳转到了 skip 标签
pause
循环 for
for 循环是批处理中最强大的工具之一,用于遍历文件、目录、数字序列和文本数据。
基本语法
for %%变量 in (集合) do 命令
重要:在 .bat 脚本中使用 双百分号 %%i,在命令行中直接运行时使用 单百分号 %i。
遍历文件
@echo off
:: 列出当前目录下所有 .txt 文件
for %%f in (*.txt) do (
echo 找到文件:%%f
)
数字循环 for /L
@echo off
:: 从 1 到 10,步长为 1
for /L %%i in (1,1,10) do (
echo 数字:%%i
)
:: 从 10 到 1,步长为 -1
for /L %%i in (10,-1,1) do (
echo 倒数:%%i
)
语法:for /L %%变量 in (起始,步长,结束) do 命令。
遍历目录 for /D
@echo off
:: 遍历当前目录下的所有子目录
for /d %%d in (*) do (
echo 子目录:%%d
)
递归遍历子目录 for /R
@echo off
:: 递归遍历当前目录及所有子目录下的 .txt 文件
for /r %%f in (*.txt) do (
echo 找到:%%f
)
解析文本/命令输出 for /F
for /F 用于解析文件内容、字符串或命令输出。
@echo off
:: 解析命令输出(dir /b 列出所有文件名)
for /f "tokens=*" %%a in ('dir /b') do (
echo 文件名:%%a
)
:: 解析字符串(按分隔符拆分)
set str=苹果,香蕉,橘子
for /f "tokens=1,2,3 delims=," %%a in ("%str%") do (
echo 水果1:%%a
echo 水果2:%%b
echo 水果3:%%c
)
:: 从文件读取每一行
for /f "usebackq tokens=*" %%a in ("data.txt") do (
echo 行内容:%%a
)
for /F 常用选项
| 选项 | 说明 |
|---|---|
tokens= |
指定提取第几个字段(如 tokens=1,3 或 tokens=*) |
delims= |
指定分隔符(默认是空格和制表符) |
skip= |
跳过前 N 行 |
usebackq |
允许使用双引号引用文件名 |