bat语句实现循环判断
1 基础运算
参考:https://blog.csdn.net/weixin_42914706/article/details/125610539
1.1 set 命令
1)set 赋值
等号两边不要有空格
变量值包含特殊字符需用双引号
避免使用系统环境变量同名的自定义变量;如:path , date , errorlevel 等
- set /a 数学运算
取余用两个百分号
set /a d=11%%2
echo d=%d%
cmd
1.2 if else
DOS命令里并没有 != 这种写法,但是提供了 not 关键词,也是条件取反的意思
if 条件(成立时执行的命令) else (不成立时执行的命令)
::当else换行是要在if 语句结尾使用 ^ 即:
if 条件(成立时执行的命令)^
else (不成立时执行的命令)
同时下面情况也是正确的
if 条件 (
执行命令
) else (
执行命令
)
1.3 for循环语句
FOR /L %%variable IN (start,step,end) DO command
其中,start为开始计数的初始值,step为每次递增的值,end为结束值。当end小于start时,step需要设置为负数
for /L %%i in (1 1 10000) do (
echo %%i
)
2 单次变量可实现for循环中变量没值
单次计算代码可以正常输出值,代码如下:
set /a d=11%%2
echo d=%d%
cmd
输出结果
将上面的计算放到for循环中输出却为空,
@echo off
for /l %%i in (1,1,6) do (
echo i=%%i
set /a d=%%i+1
echo d=%d%
)
pause
输出结果为:
这里原因是:
批 处理读取命令时是按行读取的(另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),在处理之前要完成必要的预处理工作,这其中就包括对该 行命令中的变量赋值而为了能够感知环境变量的动态变化,批处理设计了变量延迟。
变量延迟的启动语句是“setlocal enabledelayedexpansion”,并且变量要用一对叹号“!!”括起来(注意要用英文的叹号),否则就没有变量延迟的效果。
修改后:
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,6) do (
echo i=%%i
set /a d=%%i+1
echo d=!d!
)
pause
输出结果正常
3 完成
将上两部分结合即可
@echo off
setlocal enabledelayedexpansion
set /a d=%0%
for /l %%i in (1,1,6) do (
echo i:%%i
set /a d=%%i%%2
echo d=!d!
if !d! == 1 (
echo x
) else (
echo y
)
)
pause
输出结果: