![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-09 20:57 |
共 47,811 主题排行 / 349,897 发帖 / 今日 2 篇 / 48,255 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 学习变量的嵌套截取 |
| 可打印版本 803 / 2 |
| 第1楼 ygrzzz | 发表于 2008-09-24 23:40 |
| 初级用户 发帖 24 积分 62 | |
|
学习变量的嵌套截取 新手没什么可写的 ,比较基础的东西~~~
今天学习变量的嵌套截取,写了 一个批处理,如下 一。 @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 ] |
|
| 第2楼 HAT | 发表于 2008-09-24 23:45 |
| 版主 发帖 5,017 积分 9,023 | |
|
感谢分享,但最后那段比喻着实不咋地,严重影响整篇文章的质量,建议删除。
变量延迟详解 |
|
| 第3楼 ygrzzz | 发表于 2008-09-25 01:43 |
| 初级用户 发帖 24 积分 62 | |
|
的确在上面几个帖子里受到的不少启发,于是有了这帖学习过程的体会
感谢前辈们的热心点拨 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |