中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 文本内容互换 上一主题 | 下一主题
9306516
新手上路





积分 13
发帖 5
注册 2007-4-14
状态 离线
『楼 主』:  文本内容互换

请教下各位达人,鄙人遇到个很棘手的难题 现有1.ini和2.ini两个文件 1.ini 大致内容如下 [基本] 标题=【综合】 皮肤=DiamondGreen.sui 无边框=0 辅助分类=00000000 分类辅助=58b9e70b65a77700ba66e9c64d6b9f89 置底层=0 自动缩放=1 信息=00000000 速度=0 搜索=0 安全=0 2.ini 大致内容如下 [基本] 标题=【综合】 皮肤=DiamondGreen.sui 无边框=0 辅助分类=00000000 分类辅助=53b9e76465a77707ba66e9c66d6b9f59 置底层=0 自动缩放=1 信息=00000000 速度=0 搜索=0 安全=0 补充说明:上面分类辅助= 后面的字符串不确定是什么,所以必须先取得1.ini分类辅助=后的字符串再取得2.ini分类辅助=后的字符串,然后用在2.ini里取得的分类辅助=后的字符串(就一行)替换1.ini里的`


2007-5-29 14:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
9306516
新手上路





积分 13
发帖 5
注册 2007-4-14
状态 离线
『第 2 楼』:  

@echo off setlocal enabledelayedexpansion for /f "tokens=*" %%i in ('type 2.ini^|find "分类辅助"') do ( set var1=%%i for /f "tokens=*" %%a in ('type 1.ini^|find "分类辅助"') do ( set var=%%a for /f "tokens=*" %%k in (1.ini) do ( set var2=%%k set var2=!var2:var=var1! echo !var2!>>3.ini ) ) ) 请各位帮我看下我错在哪里 这个批处理还是没能替换到,我估计就是for /f "tokens=*" %%k in (1.ini) do ( set var2=%%k set var2=!var2:var=var1! echo !var2!>>3.ini 这里的问题,因为前面的我都检查过了,没错 但这里我不知道最后替换的那里该怎么改?


2007-5-29 15:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 3 楼』:  

set var2=!var2:var=var1! 我觉得这句用法有问题 var 和 var1 应该是变量的意思,你这儿是字符串 就算换成变量 这变量本身中还带有等号 = 可能会影响到正常替换的语法


2007-5-29 16:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 4 楼』:  

不知你的文件是否只有一个[基本]项,下面还有其它内容没?


2007-5-29 16:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 5 楼』:  

像这种简单的替换尽量少用for的嵌套,一来容易出错,二来处理比较大的文件速度可能会很慢。 试试下面这个:
@echo off
for /f "delims== tokens=1*" %%a in (1.ini) do (
	if not "%%b"=="" (
		if not "%%a"=="分类辅助" (echo\%%a=%%b>>new.ini) else (
		for /f "delims=" %%v in ('find "分类辅助" ^<2.ini') do echo\%%v>>new.ini
		)
	) else (echo\%%a>>new.ini)
)


2007-5-29 16:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2343
发帖 636
注册 2004-3-6
状态 离线
『第 6 楼』:  

从楼主的例子看 两个文件似乎只有“分类辅助”不一样 那还费尽心机搞什么文本替换 直接文件替换不就省事了 要不就是这个例子不具有说明性 而且楼主标题好像说的是“互换” 不过看讨论 好像没有人理这茬 都在讲“替换” 这是在用假广告来吸引我的眼球的炒作行为吗? 书归正传 通常来说,ini文件中的名值对是没有什么顺序的 除非它的读取程序作的有够弱 所以一般可以先用find /v出来不含“分类辅助”的行 再用find添加仅含“分类辅助”的行 不过话说回来 如果读取程序真得够弱 必须是原顺序不变 那么可以find/n到“分类辅助”的行号 然后再用for+more剪接文本 似乎比单纯for更节约资源一些


2007-5-29 22:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 7 楼』:  

楼主的两个文件的确只有“分类辅助”的行不一样,刚开始我看的时候也有点觉得怪,为什么不直接用他的“2.ini”呢? 后来又想可能是他只是举个例子吧,所以干脆直接就格式给代码了。


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

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


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



论坛跳转: