楼 主
文本内容互换
发表于 2007-05-29 14:55 · 中国 贵州 黔西南布依族苗族自治州 兴义市 电信
新手上路
★
积分 13 发帖 5 注册 2007-04-14 08:45 19年会员 UID 85113 性别 男
状态 离线
请教下各位达人,鄙人遇到个很棘手的难题
现有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里的`
第 2 楼
发表于 2007-05-29 15:48 · 中国 贵州 黔西南布依族苗族自治州 兴义市 电信
新手上路
★
积分 13 发帖 5 注册 2007-04-14 08:45 19年会员 UID 85113 性别 男
状态 离线
@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
这里的问题,因为前面的我都检查过了,没错
但这里我不知道最后替换的那里该怎么改?
第 3 楼
发表于 2007-05-29 16:13 · 中国 江苏 苏州 电信
银牌会员
★★★
积分 1,181 发帖 533 注册 2006-08-14 12:54 19年会员 UID 60484
状态 离线
set var2=!var2:var=var1!
我觉得这句用法有问题
var 和 var1 应该是变量的意思,你这儿是字符串
就算换成变量
这变量本身中还带有等号 =
可能会影响到正常替换的语法
第 4 楼
发表于 2007-05-29 16:14 · 中国 江苏 苏州 电信
银牌会员
★★★
积分 1,181 发帖 533 注册 2006-08-14 12:54 19年会员 UID 60484
状态 离线
不知你的文件是否只有一个[基本]项,下面还有其它内容没?
第 5 楼
发表于 2007-05-29 16:43 · 中国 湖北 武汉 电信
版主
★★★★★
积分 11,386 发帖 4,938 注册 2006-07-23 17:10 20年会员 UID 59080
状态 离线
像这种简单的替换尽量少用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)
)
第 6 楼
发表于 2007-05-29 22:48 · 中国 江西 南昌 电信
银牌会员
★★★
天的白色影子
积分 2,343 发帖 636 注册 2004-03-06 00:00 22年会员 UID 19350 性别 男
状态 离线
从楼主的例子看
两个文件似乎只有“分类辅助”不一样
那还费尽心机搞什么文本替换
直接文件替换不就省事了
要不就是这个例子不具有说明性
而且楼主标题好像说的是“互换”
不过看讨论
好像没有人理这茬
都在讲“替换”
这是在用假广告来吸引我的眼球的炒作行为吗?
书归正传
通常来说,ini文件中的名值对是没有什么顺序的
除非它的读取程序作的有够弱
所以一般可以先用find /v出来不含“分类辅助”的行
再用find添加仅含“分类辅助”的行
不过话说回来
如果读取程序真得够弱
必须是原顺序不变
那么可以find/n到“分类辅助”的行号
然后再用for+more剪接文本
似乎比单纯for更节约资源一些
第 7 楼
发表于 2007-05-29 22:56 · 中国 湖北 武汉 电信
版主
★★★★★
积分 11,386 发帖 4,938 注册 2006-07-23 17:10 20年会员 UID 59080
状态 离线
楼主的两个文件的确只有“分类辅助”的行不一样,刚开始我看的时候也有点觉得怪,为什么不直接用他的“2.ini”呢?
后来又想可能是他只是举个例子吧,所以干脆直接就格式给代码了。
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正