本帖最后由 极品小猫 于 2012-10-20 00:31 编辑
不知道标题与文章内容相不相符,求大神指点
该问题算是 http://bbs.bathome.net/thread-18546-1-1.html 的一个延伸
在这个帖子里解决了变量值作为变量名再赋值的问题,详见下面的代码- @echo off
- setlocal ENABLEDELAYEDEXPANSION
- for /f %%i in ('dir /b /ad') do (
- set /a num+=1
- set !num!=%%i
- echo !num!. %%i
- )
- echo,
- set /p i=请输入要操作的用户目录编号:
- echo !%i%!
-
- ENDLOCAL
- pause
复制代码 在 For 外,使用 !%i%! 成功显示了 !num! 的赋值,得到了目录名
但是,如果想要在 For 中输出 !num! 的赋值该如何做?
查了很多关于 变量延迟、变量扩展、变量二次扩展、For 的技术帖和资料都没找到方法。
后来看到该帖子:http://bbs.bathome.net/viewthread.php?tid=16154
如果要在For中如果想要输出二次扩展后的值,需要以下条件
1、在变量二次扩展时,变量名前面需要加一个字符(例如:逗号、句号)
2、输出二次扩展时需要用到Call ,方法为:call echo %%.!m!%%
对于 %%.!m!%% 个人理解为:
!m! 是输出 第一次的变量延迟的结果
Call 与两对百分号产生了变量延迟的效果,从而获得了二次扩展后的值
但是让我不理解的是,只有在加入那一个字符后才起作用,这个字符是作为分隔符吗?还是在处理时实际上被忽略掉? 或者实际上就是第二个变量名?
假如加了标点符号的是第二个变量名,那就不算是二次扩展了,但是在输出时的引用方式中,却又夹杂了二次扩展的影子。
我已经被这个问题给搞晕了,无从判断,求大神解救。
以下为测试代码:- @echo off & setlocal enabledelayedexpansion
- set num=0
- for /f %%i in ('dir /b /ad') do (
- set/a n+=1
- call set ".!n!=%%i"
- call echo 当前行为:%%.!n!%%
- set/a m=!n!-1
- call echo 上一行为:%%.!m!%%
- echo,
- )
- echo,
- set /p i=请输入要操作的用户目录编号:
- echo !.%i%!
-
- ENDLOCAL
- pause
复制代码
|