zoukankan      html  css  js  c++  java
  • 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:假如 mn 需要用到 %%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】

       

  • 相关阅读:
    pyqt笔记1模块 信号和插槽
    pyqt5 eric6 pyqt5-tools
    转入Python3.5
    ARM伪指令
    ARM MOV PC加8
    所有JTAG集成电路都应该支持菊花链
    冯诺依曼存储子系统的改进
    [分享]Active-HDL 9.2 安装
    运行python脚本后台执行
    scala实验 模拟图形绘制
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/6380397.html
Copyright © 2011-2022 走看看