中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-24 17:34
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]for语句中 goto和递归问题 查看 723 回复 8
楼 主 [求助]for语句中 goto和递归问题 发表于 2007-12-06 20:48 ·  中国 上海 浦东新区 电信
初级用户
积分 120
发帖 48
注册 2007-12-01 19:05
18年会员
UID 104373
性别 男
状态 离线
有如下文件 11.txt
------------------------------------------------------(分隔符,请忽略)----------------------------
###############服务器信息设值,请勿手动修改#######


# 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()里是怎么循环执行的,,哪位帮忙下,感激不经啊
2 发表于 2007-12-06 21:02 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
call :ww
call :qq
第一高手 第二高手

3 发表于 2007-12-06 21:16 ·  中国 上海 浦东新区 电信
初级用户
积分 120
发帖 48
注册 2007-12-01 19:05
18年会员
UID 104373
性别 男
状态 离线
Originally posted by fastslz at 2007-12-6 09:02 PM:
call :ww
call :qq


不好意思 没明白 能说详细点吗? 谢谢。
4 发表于 2007-12-06 21:46 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
我是说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
第一高手 第二高手

5 发表于 2007-12-06 22:05 ·  中国 上海 浦东新区 电信
初级用户
积分 120
发帖 48
注册 2007-12-01 19:05
18年会员
UID 104373
性别 男
状态 离线
空白行显示出 “ECHO 处于关闭状态。”

空白行不修改,就让它空白,,怎么修改??
6 发表于 2007-12-06 22:12 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
>>result.txt echo !front!
改为
>>result.txt echo.!front!
7 发表于 2007-12-06 22:14 ·  中国 上海 浦东新区 电信
初级用户
积分 120
发帖 48
注册 2007-12-01 19:05
18年会员
UID 104373
性别 男
状态 离线
虽然显示出来还行,,就是有“ECHO 处于关闭状态。”

但是基本思路还是不行,,实际上我的那个txt里面有许多要0改1,1改0的,
例如 cti=0 css=1所以必须对%%a做判断,然后在修改%%b
8 发表于 2007-12-06 22:24 ·  中国 上海 浦东新区 电信
初级用户
积分 120
发帖 48
注册 2007-12-01 19:05
18年会员
UID 104373
性别 男
状态 离线
------------------------------------------------------(分隔符,请忽略)----------------------------
###############服务器信息设值,请勿手动修改#######


# 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 ]
9 发表于 2007-12-06 22:28 ·  中国 上海 浦东新区 电信
初级用户
积分 120
发帖 48
注册 2007-12-01 19:05
18年会员
UID 104373
性别 男
状态 离线
每次碰到问题 总上来求助 有时候真觉得有点不好意思 啊..呵呵...
论坛跳转: