Board logo

标题: [求助]怎么用set的替换字符功能? [打印本页]

作者: kingerpk     时间: 2009-2-3 22:22    标题: [求助]怎么用set的替换字符功能?

我为了练习for写了这么一句
for %%a in (a123,a465,a789) do (
set b=%%a
set c=%b:a=a被替换%
echo %C%
)
pause
但是最后输出的%c%是空的。

我认为是变量延时的问题就改成这样:
setlocal enabledelayedexpansion
for !!a in (a123,a465,a789) do (set b=!!a
set c=!b:a=a被替换!
echo !C!
)
pause
但结果使我更无奈:批处窗口一闪而过~~~~~失败~~~~~~
为什么会这样啊?

还请大家指点指点!!!!



————————————————————————————————
转移自 DOS疑难解答 & 问题讨论 (解答室)
明显发错版块。因属论坛新手,故暂不予以处罚,望今后引起注意。
——管理员
————————————————————————————————

作者: 523066680     时间: 2009-2-3 22:58
管理员准备转移这个帖子吧 喀喀喀。。。。


回复: for 部分的变量傍边的%% 不用改成!!
作者: HAT     时间: 2009-2-3 23:13
变量延迟详解
http://www.cn-dos.net/forum/viewthread.php?tid=28273

什么情况下该使用变量延迟
http://www.cn-dos.net/forum/viewthread.php?tid=20733

一个变量嵌套变量的问题
http://www.cn-dos.net/forum/viewthread.php?tid=41143
作者: yishanju     时间: 2009-2-4 15:30
晕,为什么楼主没写对代码
没人说

字符串要用引号括起来
setlocal enabledelayedexpansion
for %%a in ("a123,a465,a789") do (set b=%%a
        set c=!b:a=a被替换!
        echo !C!
)
pause
没用引号的话被被当成文件处理,单引括起来的会被以当成命令执行

[ Last edited by yishanju on 2009-2-4 at 15:32 ]
作者: zhengqian529     时间: 2009-2-4 15:59
经过测试,楼上正解。
问题出在延时是对的,可是
for !!a in (a123,a465,a789) do (set b=!!a
这个里面的a不能使用!!,要写为%%a
作者: hongtashan     时间: 2009-2-6 00:18
凡是要在for语句后,再次调用你原先定义的变量,就要用变量延迟;
还有在需要使用变量里套变量也可以使用变量延迟