BAT脚本__02 条件 循环
条件语句
仅if情况
if "%choice%"=="R" color c
字符相关判断
if "%TIME:~0,2%" lss "12" (
echo 现在是上午
) else (
echo 现在是下午
)
数值相关判断
set /a num=5
if %num% equ 5 (
echo 变量 num 等于 5
)
if not %num% equ 4 (
echo 变量 num 不等于 4
)
以下数值/字符均可使用:
== - 等于
EQU - 等于
NEQ - 不等于
LSS - ?于
LEQ - ?于或等于
GTR - ?于
GEQ - ?于或等于
否定NOT
if not %num% == 4 (
echo 变量 num 不等于 4
)
存在exist
if exist "D:\test my folder\a.txt" (
del "D:\test my folder\a.txt"
) else (
echo 您所要删除的文件不存在
)
变量定义defined
对于 if defined 来说,与 if exist 类似,只不过 if defined 的判断对象不是文件,而是变量,它用于判断环境变量是否被定义。
循环语句 文件遍历
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。
如果在 /R 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符,
则枚举该目录树。
@echo off
for /r *. %a in (*.txt) do find "bluebear" %a
结果:对当前目录下所有文件(包括子目录里面的文件)进行操作。
@echo off
setlocal EnableDelayedExpansion
set /a num=1
for %%i in (D:\test\*.txt) do (
ren "%%i" !num!.txt=> 1.必须用延迟变量 2.!num!.txt两边带不带双引号效果一样
set /a num+=1
)
结果:重命名D:\test\下的所有txt文件为:1.txt 2.txt等。
命令提示符里用%i,在批处理文件中应使用双百分号 %% 代替单百分比号 %,原因:bat中%为转义字符。
数字遍历
FOR /L %variable IN (start,step,end) DO command [command-parameters]
该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5)将产生序列
1 2 3 4 5,(5,-1,1)将产生序列(5 4 3 2 1)
@echo off
setlocal EnableDelayedExpansion
set var=○
for /l %%i in (1,1,7) do set var=%var%!var!
此时变量 var 已经变成一行连续的8个圆圈了
字符遍历
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
fileset 为一个或多个文件名。继续到 fileset 中的下一个文件之前,
每份文件都被打开、读取并经过处理。处理包括读取文件,将其分成一行行的文字,
然后将每行解析成零或更多的符号。然后用已找到的符号字符串变量值调用 For 循环。
以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。
你可通过指定可选 "options" 参数替代默认解析操作。这个带引号的字符串包括一个
或多个指定不同解析选项的关键字。这些关键字为:eol=c- 指一个行注释字符的结尾(就一个)
skip=n- 指在文件开始时忽略的行数。
delims=xxx- 指分隔符集。这个替换了空格和制表符的
默认分隔符集。
tokens=x,y,m-n- 指每行的哪一个符号被传递到每个迭代
的 for 本身。这会导致额外变量名称的分配。m-n
格式为一个范围。通过 nth 符号指定 mth。如果
符号字符串中的最后一个字符星号,
那么额外的变量将在最后一个符号解析之后
分配并接受行的保留文本。
usebackq- 指定新语法已在下类情况中使用:
在作为命令执行一个后引号的字符串并且一个单
引号字符为文字字符串命令并允许在 file-set
中使用双引号扩起文件名称。
- 文件
@echo off
echo 测试 文字筛选.txt 里每一行的首单词
for /f %%i in (文字筛选.txt) do echo %%i
pause
@echo off
echo skip=2 表示前两行被跳过
for /f "skip=2" %%i in (文字筛选.txt) do echo %%i
pause
@echo off
echo tokens=2,4-6 表示提取每行的第2个、以及第4到6个单词
for /f "skip=2 tokens=2,4-6" %%i in (文字筛选.txt) do echo %%i, %%j, %%k, %%l.
pause
@echo off
echo eol=N 表示当此行的首字母为 N 时,就忽略该行
for /f "eol=N skip=2 tokens=2,4-6" %%i in (文字筛选.txt) do echo %%i, %%j, %%k, %%l.
pause
@echo off
echo delims=e 表示不再以空格区分每个词,而是以字母 e 作为间隔
for /f "eol=N skip=2 tokens=2,4-6 delims=e" %%i in (文字筛选.txt) do echo %%i, %%j, %%k, %%l.
pause
@echo off
echo usebackq 表示双引号里的东西是文件名而不是字符串
for /f "usebackq eol=N skip=2 tokens=2,4-6 delims=e" %%i in ("文字筛选.txt") do echo %%i, %%j, %%k, %%l.
pause
- 字符串
@echo off
for /f "tokens=1-3" %%i in ("This text is an example") do echo %%i, %%j, %%k
pause
输出:This, text, is
- 命令
@echo off
set var=This text is an example
for /f "tokens=1-3" %%i in ('echo %var%') do echo %%i, %%j, %%k
pause
【BAT脚本__02 条件 循环】输出:This, text, is
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- mybatisplus如何在xml的连表查询中使用queryWrapper
- mybatisplus|mybatisplus where QueryWrapper加括号嵌套查询方式
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- (七)谈条件
- 「按键精灵安卓版」关于全分辨率脚本的一些理解(非游戏app)
- Linux|109 个实用 shell 脚本
- Improve|Improve Nested Conditionals(优化嵌套的条件语句) 面对大量的if-else语句
- 无条件接纳