中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]for语句中 goto和递归问题
作者:
标题: [求助]for语句中 goto和递归问题 上一主题 | 下一主题
chenai79921
初级用户





积分 120
发帖 48
注册 2007-12-1
状态 离线
『楼 主』:  [求助]for语句中 goto和递归问题

有如下文件 11.txt
------------------------------------------------------(分隔符,请忽略)----------------------------
###############服务器信息设值,请勿手动修改#######
                        
[ServerInfo]                                
# CTI服务器IP                                
CTIServerIP=172.16.208.444                              
CTIPort=5001
CTI=0                              
------------------------------------------------------(分隔符,请忽略)----------------------------

现在我想修改172.16.208.444为172.16.208.18 ,5001修改为1005,其他行不修改,写了如下代码
echo off
for /f "tokens=1,2 delims==" %%a in (11.txt) do (
    set front=%%a
    set back=%%b
    setlocal enabledelayedexpansion
if "!front: =!"=="CTIPort" set back=1005
if "!front: =!"=="CTIServerIP" set back=172.16.208.18
echo/!front!=!back!>>result.txt
endlocal
)pause
运行后发现,没有=号的行,,结尾处都出现了等于号,,然后我修改代码如下
echo off
for /f "tokens=1,2 delims==" %%a in (11.txt) do (
    set front=%%a
    set back=%%b
    setlocal enabledelayedexpansion
if "!front: =!"=="CTIPort" (set back=1005 goto qq)
if "!front: =!"=="CTIServerIP" (set back=172.16.208.18 goto qq)
echo/!front!>>result.txt
goto ww
:qq
echo/!list!=!back!>>result.txt
:ww
endlocal
)
pause
但是只输出了第一行,不明白do()里是怎么循环执行的,,哪位帮忙下,感激不经啊

2007-12-6 20:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 2 楼』:  

call :ww
call :qq



第一高手    第二高手

2007-12-6 21:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
chenai79921
初级用户





积分 120
发帖 48
注册 2007-12-1
状态 离线
『第 3 楼』:  



  Quote:
Originally posted by fastslz at 2007-12-6 09:02 PM:
call :ww
call :qq

不好意思 没明白 能说详细点吗? 谢谢。

2007-12-6 21:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 4 楼』:  

我是说for里用call才能循环,就你那样,不用这么复杂
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in (11.txt) do (
    set "front=%%a"
    set "front=!front:444=18!"
    set "front=!front:5001=1005!"
    >>result.txt echo !front!
)
pause



第一高手    第二高手

2007-12-6 21:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
chenai79921
初级用户





积分 120
发帖 48
注册 2007-12-1
状态 离线
『第 5 楼』:  

空白行显示出 “ECHO 处于关闭状态。”

空白行不修改,就让它空白,,怎么修改??

2007-12-6 22:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 6 楼』:  

>>result.txt echo !front!
改为
>>result.txt echo.!front!



2007-12-6 22:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
chenai79921
初级用户





积分 120
发帖 48
注册 2007-12-1
状态 离线
『第 7 楼』:  

虽然显示出来还行,,就是有“ECHO 处于关闭状态。”

但是基本思路还是不行,,实际上我的那个txt里面有许多要0改1,1改0的,
例如 cti=0 css=1所以必须对%%a做判断,然后在修改%%b

2007-12-6 22:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
chenai79921
初级用户





积分 120
发帖 48
注册 2007-12-1
状态 离线
『第 8 楼』:  

------------------------------------------------------(分隔符,请忽略)----------------------------
###############服务器信息设值,请勿手动修改#######
                        
[ServerInfo]                                
# CTI服务器IP                                
CTIServerIP=172.16.208.444                              
CTIPort=5001
CTI=0  
CSS=1
OPQ=0
WWW=1                             
------------------------------------------------------(分隔符,请忽略)----------------------------

前天发了个帖子也是关于这个的。

其实我是想修改172.16.208.444为172.16.208.18 ,5001修改为1005,CTI=1
CSS=0其他行不修改...........

[ Last edited by chenai79921 on 2007-12-6 at 10:25 PM ]

2007-12-6 22:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
chenai79921
初级用户





积分 120
发帖 48
注册 2007-12-1
状态 离线
『第 9 楼』:  

每次碰到问题 总上来求助 有时候真觉得有点不好意思 啊..呵呵...

2007-12-6 22:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: