中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 问个问题,已经查阅了精华文章和例子但还没有解决
作者:
标题: 问个问题,已经查阅了精华文章和例子但还没有解决 上一主题 | 下一主题
flamemperor
初级用户





积分 66
发帖 29
注册 2007-9-6
状态 离线
『楼 主』:  问个问题,已经查阅了精华文章和例子但还没有解决

是关于变量延迟的。我花了很长时间看精华帖子,和里面连接过去的文章,能看懂一点,但对于我自己的例子,还是不能解决,应该是我什么地方写错了,但这种错,多于高人来说是一句话的事,可我已经迷惑了两天了。。。。。。,哪位帮忙看一眼,谢谢了。


这个例子没什么实际意义,就是想测一下变量延迟,问题是为什么第二个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

2007-9-7 14:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 2 楼』:  

@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

套嵌没有问题……

2007-9-7 14:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flamemperor
初级用户





积分 66
发帖 29
注册 2007-9-6
状态 离线
『第 3 楼』:  

谢谢 你的回帖,我试一下。

2007-9-7 15:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flamemperor
初级用户





积分 66
发帖 29
注册 2007-9-6
状态 离线
『第 4 楼』:  

你的例子确实是对的,我的就不行,呵呵。

是不是不能在路经中引用!var!呢?

我不是很明白,添麻烦了俄。

2007-9-7 15:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 5 楼』:  

你ECHO下……

看看,你的例子我没有办法测试%1,%2不知道什么东西……还有所包含的文件……

如果不支持那可能是FOR的问题……
你要什么效果?dir可能可以解决………

2007-9-7 15:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flamemperor
初级用户





积分 66
发帖 29
注册 2007-9-6
状态 离线
『第 6 楼』:  

恩,这个例子没有任何实际用处,就是看了精华之后自己试验一下。%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什么都没显示出来。

2007-9-7 15:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flamemperor
初级用户





积分 66
发帖 29
注册 2007-9-6
状态 离线
『第 7 楼』:  

恩,大家好,我又把例子改了下,这样写,只能输出两个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

2007-9-7 15:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flamemperor
初级用户





积分 66
发帖 29
注册 2007-9-6
状态 离线
『第 8 楼』:  

顶一下,大家帮忙看看。

2007-9-10 09:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 9 楼』:  


@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
????

2007-9-10 09:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flamemperor
初级用户





积分 66
发帖 29
注册 2007-9-6
状态 离线
『第 10 楼』:  

谢谢ls,用Call这种方法可以解决类似的问题?

2007-9-10 09:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flamemperor
初级用户





积分 66
发帖 29
注册 2007-9-6
状态 离线
『第 11 楼』:  

恩,我还有个疑问。

如果这样写:
set var=1
for .... do(
set var=2
call :ls %var%
)

:ls 这里引用到的1%是1,而不是2对么?

因为do里面的语句预处理的时候被当作一个语句?所以var没有被扩展为2?

2007-9-10 09:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: