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=%%i+2 set /a %%i=!%%i!+2 set /a %%i=-%%i set /a %%i=-!%%i! set set ) Pause |
sublime中:
运行一览:
上面一切形式对循环变量
%%i 进行运算以及
添加负号都是无效的,循环变量
%%i 值不会
有任何变化,并且会显示 "找不到操作数"
和
"运算符不存在"
三:
for 语句里,可以改变上下限的值,但不会影响循环次数
如:
@echo off setlocal enabledelayedexpansion for /l %%i in (!min!,1,!max!) do ( 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+34,25-6 等这样的表达
式,所以实现上面的效果对编辑计算器非常有用,符合输入习惯
@echo off setlocal enabledelayedexpansion for /f "delims=+ tokens=1,2" set num1=%%i set num2=%%j echo num1 = !num1! num2 = !num2! ) pause |
sublime中:
运行一览:
注意:"%num%" 一定要用双引号引起来,否则计算机会显示
"找不到文件"
【made by siwuxie095】
最新文章
- Ruby多行字符串,begin/end语句、注释
- jetty for linux 启用日志
- Struts2学习笔记-jsp中引用struts2框架
- Android C2DM学习 - 云端推送
- gvim设置字体和隐藏菜单栏工具栏
- cf754D
- BCB的博客,以及例子(好多传输文件的例子)
- Flexigrid的编辑功能
- win7下硬盘安装win7+CentOS双系统方法
- c/c++ 网络编程 UDP 改变网关和网卡名字
- [再寄小读者之数学篇](2014-06-20 求极限-L'Hospital 法则的应用)
- Datatables插件1.10.15版本服务器处理模式ajax获取分页数据实例解析
- Dockerfile 时区设置
- leetcode-14最长公共前缀
- 数以亿计运行PHP的网站即将面临严重的安全风险
- Vue学习(4)
- [SSRS / RV] (.rdlc报表)冻结表头,固定行列标题
- Redis系列七:redis持久化
- <;A>;标签电子邮件链接
- Android 如何在Eclipse 引入外部纯Java项目(不是打成Jar使用)
热门文章
- mouseover、mouseout和mouseenter、mouseleave
- navicat链接mysql 8 出现 2015 authentication plugin &#39;caching_sha2_password&#39; 错误
- eclipse+PyDev遇到字符UTF-8的问题
- 解决Eclipse中新创建的Maven项目不自动创建web.xml文件
- I.MX6 linux kernel编译错误处理
- SEO -- WP如何建立SiteMap
- nyoj A+B Problem IV
- Hive之 hive-1.2.1 + hadoop 2.7.4 集群安装
- asm335x系列adc和触摸屏驱动(转)
- System.IO.Path类