![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-05 19:24 |
共 48,039 主题排行 / 350,124 发帖 / 今日 2 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 问个问题,已经查阅了精华文章和例子但还没有解决 |
| 可打印版本 978 / 10 |
| 第1楼 flamemperor | 发表于 2007-09-07 14:36 |
| 初级用户 发帖 29 积分 66 | |
|
问个问题,已经查阅了精华文章和例子但还没有解决 是关于变量延迟的。我花了很长时间看精华帖子,和里面连接过去的文章,能看懂一点,但对于我自己的例子,还是不能解决,应该是我什么地方写错了,但这种错,多于高人来说是一句话的事,可我已经迷惑了两天了。。。。。。,哪位帮忙看一眼,谢谢了。
这个例子没什么实际意义,就是想测一下变量延迟,问题是为什么第二个for循环里无法引用到!var!,我试过将!!换成%%,但是引用的是初始值1。 setlocal EnableDelayedExpansion set var=1 for /r %1 %%b in (.) do ( set var=%%~nb for /r %1\!var! %%a in (*.*) do ( if exist %2\!var!\%%~na%%~xa echo Yes echo !var! ) ) echo !var! endlocal pause |
|
| 第2楼 slore | 发表于 2007-09-07 14:59 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
@echo off
setlocal EnableDelayedExpansion set var=1 for /l %%i in (1,1,10) do ( set var=%%i for /l %%a in (1,1,!var!) do ( echo %%a !var! ) ) endlocal pause 套嵌没有问题…… |
|
| 第3楼 flamemperor | 发表于 2007-09-07 15:02 |
| 初级用户 发帖 29 积分 66 | |
|
谢谢 你的回帖,我试一下。
|
|
| 第4楼 flamemperor | 发表于 2007-09-07 15:07 |
| 初级用户 发帖 29 积分 66 | |
|
你的例子确实是对的,我的就不行,呵呵。
是不是不能在路经中引用!var!呢? 我不是很明白,添麻烦了俄。 |
|
| 第5楼 slore | 发表于 2007-09-07 15:12 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
你ECHO下……
看看,你的例子我没有办法测试%1,%2不知道什么东西……还有所包含的文件…… 如果不支持那可能是FOR的问题…… 你要什么效果?dir可能可以解决……… |
|
| 第6楼 flamemperor | 发表于 2007-09-07 15:18 |
| 初级用户 发帖 29 积分 66 | |
|
恩,这个例子没有任何实际用处,就是看了精华之后自己试验一下。%1和%2可以是任何目录。
我echo了, 用!var!引用时,For的地方就显示!var! 用%var%引用时,For那里就显示1 而且我简化一下这个东西: echo off setlocal EnableDelayedExpansion set var=1 for /r %1 %%b in (.) do ( set var=%%~nb for /r %1\!var! %%a in (*.*) do ( echo !var! ) ) echo !var! endlocal pause 第二个for里面的echo什么都没显示出来。 |
|
| 第7楼 flamemperor | 发表于 2007-09-07 15:36 |
| 初级用户 发帖 29 积分 66 | |
|
恩,大家好,我又把例子改了下,这样写,只能输出两个C:,但是如果把for 里面的!var!换成C:, 那就多了去了,这是为什么呢?For这里的参数不能用!!来引用么?
echo off setlocal EnableDelayedExpansion set var=1 set var=C: echo !var! for /r !var! %%a in (*.*) do ( echo !var! ) echo !var! endlocal pause |
|
| 第8楼 flamemperor | 发表于 2007-09-10 09:02 |
| 初级用户 发帖 29 积分 66 | |
|
顶一下,大家帮忙看看。
|
|
| 第9楼 wudixin96 | 发表于 2007-09-10 09:10 |
| 银牌会员 发帖 931 积分 1,928 | |
|
???? |
|
| 第10楼 flamemperor | 发表于 2007-09-10 09:26 |
| 初级用户 发帖 29 积分 66 | |
|
谢谢ls,用Call这种方法可以解决类似的问题?
|
|
| 第11楼 flamemperor | 发表于 2007-09-10 09:39 |
| 初级用户 发帖 29 积分 66 | |
|
恩,我还有个疑问。
如果这样写: set var=1 for .... do( set var=2 call :ls %var% ) :ls 这里引用到的1%是1,而不是2对么? 因为do里面的语句预处理的时候被当作一个语句?所以var没有被扩展为2? |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |