中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: 学习变量的嵌套截取 上一主题 | 下一主题
ygrzzz
初级用户





积分 62
发帖 24
注册 2008-9-17
状态 离线
『楼 主』:  学习变量的嵌套截取

新手没什么可写的 ,比较基础的东西~~~ 今天学习变量的嵌套截取,写了 一个批处理,如下 一。 @echo off set a=abcdefg set e=3 :: set/p e=输入数字。。。 echo %a:~1,%e%% pause 测试结果显示 e% 估计是把前部分%a:~1,%解释为空值,最后的双百分号脱为单百分号的 结果 二。 改为 echo %a:~1,%%e%% 或 echo %a:~1,%%e% 结果均只显示为e的值3 三。 由此推测cmd解释变量的方式是以成对百分号从左倒右顺序来解释的 如此的 话单纯的 echo是 没法完成目标了,想起以前别人的P处的 for用法中 提到变量延迟问题,继续改 @echo off SETLOCAL EnableDelayedExpansion set a=abcdefg set e=3 echo !a:~1,%e%! pause 果然正确显示出结果3个字符 bcd 看来正确解释出这个嵌套变量必须由内而外分2层来解释 四。 继续测试call方式 @echo off set a=abcdefg set e=3 call echo %a:~1,%e%% pause 结果显示e 理解为echo %a:~1,%e%%===结果e% 那么call e%结果为e e前加个%来看看, call echo %a:~1,%%e%%结果显示3(前面不加call也 显示3) 五。 头尾继续加%,改为 call echo %%a:~1,%%e%%% 结果显示e 于是去掉e前面的%(还原) call echo %%a:~1,%e%%% NND总算看见曙光了,再次显示bcd 多余再测试一下,去掉call改为 echo %%a:~1,%e%%% 显示为 %a:~1,3% 再次证明cmd解释变量时把%%化二为一% 从左往右遇到l一对中间有字符的%*%时当变量解释 很显然第一次echo的结果为%a:~1,3% 关于call暂且理解为再次启动一次cmd环境进行解释,于是得到正确结果 ....ok~~~~~~~ [ Last edited by ygrzzz on 2008-9-25 at 01:35 AM ]


   此帖被 +8 点积分        点击查看详情   
评分人:【 moniuming 分数: +8  时间:2008-9-25 09:17


2008-9-24 23:40
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  

感谢分享,但最后那段比喻着实不咋地,严重影响整篇文章的质量,建议删除。
变量延迟详解 www.cn-dos.net/forum/viewthrea ... 什么情况下该使用变量延迟 www.cn-dos.net/forum/viewthrea ... 一个变量嵌套变量的问题 www.cn-dos.net/forum/viewthrea ...




2008-9-24 23:45
查看资料  发短消息  网志   编辑帖子  回复  引用回复
ygrzzz
初级用户





积分 62
发帖 24
注册 2008-9-17
状态 离线
『第 3 楼』:  

的确在上面几个帖子里受到的不少启发,于是有了这帖学习过程的体会 感谢前辈们的热心点拨


2008-9-25 01:43
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: