bat语句实现循环判断

文章详细介绍了如何在批处理脚本中使用set命令进行变量赋值,包括数学运算和处理特殊字符。接着讨论了if...else条件判断的用法,并指出DOS命令中的条件取反。然后讲解了for循环语句,特别是FOR/L的语法。文章还提到了在for循环中使用变量延迟解决批处理中变量更新的问题,并给出了解决方案。最后,展示了如何结合这些概念完成一个简单的循环和条件判断的例子。
摘要由CSDN通过智能技术生成

bat语句实现循环判断

1 基础运算

参考:https://blog.csdn.net/weixin_42914706/article/details/125610539

1.1 set 命令

1)set 赋值
等号两边不要有空格
变量值包含特殊字符需用双引号
避免使用系统环境变量同名的自定义变量;如:path , date , errorlevel 等

  1. 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

输出结果:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值