for 续9

-------siwuxie095

  

  

  

  

for拾遗:

  

  

一:

for 语句里,do 后面一般会有括号,有括号就是复合语句,

假如需要用到括号里的变量,就需要延迟变量。于是,基本

上有 for 的地方,就需要用到延迟变量

  

  

  

二 :

for 语句里,不能改变循环变量%%i 的值

  

如:

@echo off

setlocal enabledelayedexpansion

for /l %%i in (1,1,10) do (

set /a %%i-=2

set /a i-=2

set /a !i!-=2

set /a %%i=%%i+2

set /a %%i=!%%i!+2

set /a %%i=-%%i

set /a %%i=-!%%i!

set%%i=-%%i

set%%i=-!%%i!

)

Pause

  

sublime中:

  

  

运行一览:

  

  

  

上面一切形式对循环变量%%i 进行运算以及

添加负号都是无效的,循环变量%%i 值不会

有任何变化,并且会显示 "找不到操作数"

"运算符不存在"

  

  

  

三:

for 语句里,可以改变上下限的值,但不会影响循环次数

  

如:

@echo off

setlocal enabledelayedexpansion

set min=1

set max=10

for /l %%i in (!min!,1,!max!) do (

set /a min+=2

set /a max*=3

echo min=!min! max=!max!

)

pause

  

sublime中:

  

  

运行一览:

  

  

  

  

  

四:

for 语句里,以 %var:~m,n% 形式截取字符,会变得掣肘!

  

主要原因是 for 语句里不能对循环变量%%i 进行运算,以及在

延迟变量环境下,很难表达%var:~m,n%

  

  

情况 1:假如 m 恒等于%%i,而 n 总比 m 相差一个定值 P

如何表达%var:~m,n%这个形式

  

情况 2:假如 m n 需要用到%%i 的负值,也就是 -%%i 形式,

如何表达%var:~m,n%这个形式

  

  

对于情况 1,第一反应就是引入一个新变量 j,对 j 值可以

进行运算,然后将 j 代入%var:~m,n%即可

  

代码如下:

@echo off

setlocal enabledelayedexpansion

set var=abcdefghijklmnopqrstuvwxyz

for /l %%i in (1,1,10) do (

set /a j=%%i-1

set tem=!var:~%%i,j!

echo !tem!

)

pause

  

sublime中:

  

  

  

上面的代码肯定不行,因为 set tem=!var:~%%i,j!中的 j 是变量,

没有用变量符号将其表达出来。而代码用了延迟变量,则表达式改

set tem=!var:~%%i,%j%!肯定不对

  

  

用感叹号如何:

set tem=!var:~%%i,!j!!

也不行,因为从计算机角度看来,感叹号括到的范围为

!var:~%%i,!j!!,这个结果不是想要的

  

那么,如果先对 j 进行处理set j=!!j!!,然后 set tem=!var:~%%i,j!

这样也不行。也即,假如 m 值和 n 值,是有一定关系差值的动态变化

情况,就无法简单用%var:~m,n%

  

这个形式表达出来,得另想办法,具体实现,

要看实际要达到什么效果

  

  

对于情况 2,由于不能对%%i 进行取负值,但却能从一开始

循环时对循环参数取负值

  

如:

@echo off

setlocal enabledelayedexpansion

set var=abcdefghijklmnopqrstuvwxyz

for /l %%i in (-1,-1,-10) do (

set tem=!var:~%%i!

echo !tem!

)

Pause

  

sublime中:

  

  

运行一览:

  

  

  

上面,只需要用到 m 值 ,假如 n 值随 m 值变化而变化,

想要用%var:~m,n%的形式又束手无策了,得另想办法,

具体实现,要看实际要达到什么效果

  

  

一个变通的例子:输入一串字符,要求从字符串末尾

一个一个字符输出到字符串开头

@echo off

setlocal enabledelayedexpansion

set var=abcdefghijklmnopqrstuvwxyz

for /l %%i in ( -1,-1,-26 ) do (

set tem=!var:~%%i!

set tem= !tem!

set tem=!tem:~1,1!

echo !tem!

)

pause

  

sublime中:

  

  

运行一览:

  

  

  

  

  

五:

读入一个有两个数的算式,将其中的两个数赋值到字符串并回显

  

在输入数学表达式的时候,都是输入像 12+3425-6 等这样的表达

式,所以实现上面的效果对编辑计算器非常有用,符合输入习惯

@echo off

setlocal enabledelayedexpansion

set num=123+456

for /f "delims=+ tokens=1,2"%%i in ("!num!") do (

set num1=%%i

set num2=%%j

echo num1 = !num1! num2 = !num2!

)

pause

  

sublime中:

  

  

运行一览:

  

  

  

注意:"%num%" 一定要用双引号引起来,否则计算机会显示

"找不到文件"

  

  

【made by siwuxie095】

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值