楼 主
问个问题,已经查阅了精华文章和例子但还没有解决
发表于 2007-09-07 14:36 · 中国 北京 鹏博士BGP
初级用户
★
积分 66
发帖 29
注册 2007-09-06 15:09
18年会员
UID 96715
性别 男
状态 离线
是关于变量延迟的。我花了很长时间看精华帖子,和里面连接过去的文章,能看懂一点,但对于我自己的例子,还是不能解决,应该是我什么地方写错了,但这种错,多于高人来说是一句话的事,可我已经迷惑了两天了。。。。。。,哪位帮忙看一眼,谢谢了。
这个例子没什么实际意义,就是想测一下变量延迟,问题是为什么第二个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 楼
发表于 2007-09-07 14:59 · 中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
@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 楼
发表于 2007-09-07 15:02 · 中国 北京 鹏博士BGP
初级用户
★
积分 66
发帖 29
注册 2007-09-06 15:09
18年会员
UID 96715
性别 男
状态 离线
第 4 楼
发表于 2007-09-07 15:07 · 中国 北京 鹏博士BGP
初级用户
★
积分 66
发帖 29
注册 2007-09-06 15:09
18年会员
UID 96715
性别 男
状态 离线
你的例子确实是对的,我的就不行,呵呵。
是不是不能在路经中引用!var!呢?
我不是很明白,添麻烦了俄。
第 5 楼
发表于 2007-09-07 15:12 · 中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
你ECHO下……
看看,你的例子我没有办法测试%1,%2不知道什么东西……还有所包含的文件……
如果不支持那可能是FOR的问题……
你要什么效果?dir可能可以解决………
第 6 楼
发表于 2007-09-07 15:18 · 中国 北京 鹏博士BGP
初级用户
★
积分 66
发帖 29
注册 2007-09-06 15:09
18年会员
UID 96715
性别 男
状态 离线
恩,这个例子没有任何实际用处,就是看了精华之后自己试验一下。%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 楼
发表于 2007-09-07 15:36 · 中国 北京 鹏博士BGP
初级用户
★
积分 66
发帖 29
注册 2007-09-06 15:09
18年会员
UID 96715
性别 男
状态 离线
恩,大家好,我又把例子改了下,这样写,只能输出两个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 楼
发表于 2007-09-10 09:02 · 中国 北京 鹏博士BGP
初级用户
★
积分 66
发帖 29
注册 2007-09-06 15:09
18年会员
UID 96715
性别 男
状态 离线
第 9 楼
发表于 2007-09-10 09:10 · 中国 香港 腾讯云
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
19年会员
UID 75624
性别 男
状态 离线
@echo off
set var=1
set var=C:
echo %var%
call :lb %var%
pause
goto :eof
:lb
setlocal EnableDelayedExpansion
for /r %1 %%a in (*.*) do (
echo !var!
)
echo %var%
endlocal
????
第 10 楼
发表于 2007-09-10 09:26 · 中国 北京 鹏博士BGP
初级用户
★
积分 66
发帖 29
注册 2007-09-06 15:09
18年会员
UID 96715
性别 男
状态 离线
第 11 楼
发表于 2007-09-10 09:39 · 中国 北京 鹏博士BGP
初级用户
★
积分 66
发帖 29
注册 2007-09-06 15:09
18年会员
UID 96715
性别 男
状态 离线
恩,我还有个疑问。
如果这样写:
set var=1
for .... do(
set var=2
call :ls %var%
)
:ls 这里引用到的1%是1,而不是2对么?
因为do里面的语句预处理的时候被当作一个语句?所以var没有被扩展为2?
论坛跳转: