无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 5549|回复: 13
打印 上一主题 下一主题

[求助]如何用批处理修改(替换)文件中的特定字符

[复制链接]
跳转到指定楼层
1#
发表于 2004-8-12 14:02:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用手工修改系统安装盘很麻烦,弄的脑袋都大了,还很容易出错.希望得到各位指教,如何用批处理来替换一个文件中的字符呢?
文件如下:
txtsetup.sif中需要在特定行前面加上“;;”
;;pyime.cat    = 1,,,,,,,,3,3

;;imegen.tpl   = 1,,,,,,,2,0,0
;;imegen.exe   = 1,,,,,,,2,3,3
;;chnuconv.exe = 1,,,,,,,2,3,3
希望能给出实例。不胜感激!
2#
发表于 2004-8-12 14:08:54 | 只看该作者

[求助]如何用批处理修改(替换)文件中的特定字符

关键是特定行就比较麻烦,如果是所有行就比较简单。
你可以用lmod或者sed来实现。
type txtsetup.sif | lmod /L* ;;[] > txtsetup.new
回复

使用道具 举报

3#
 楼主| 发表于 2004-8-12 14:19:24 | 只看该作者

[求助]如何用批处理修改(替换)文件中的特定字符

非常感谢版主回复,你说的我还不明白,如果可以请把你的命令注释一下。曾经查找一些资料也不能解决。我这里搜集到一点资料,供斑竹参考,希望斑竹能写出一个实例。
echo sfmanm.sys>> txtsetup.log
echo ac97ali.sys>> txtsetup.log
echo ac97via.sys>> txtsetup.log
echo essm2e.sys>> txtsetup.log
findstr /v /b /i /g:txtsetup.log i386\txtsetup.sif > txtsetup.sif
move txtsetup.sif i386\txtsetup.sif
del txtsetup.log
回复

使用道具 举报

4#
 楼主| 发表于 2004-8-12 14:30:23 | 只看该作者

[求助]如何用批处理修改(替换)文件中的特定字符

用教本程序实现这个是不是更容易一些呢?
本人没有系统学习过电脑,也不懂英文,所以也没有过高的目标,只是想用简单的办法把电脑弄的更适合自己口味。希望得到斑竹和众人指教。
回复

使用道具 举报

5#
发表于 2004-8-12 14:56:08 | 只看该作者

[求助]如何用批处理修改(替换)文件中的特定字符

关键是你没有说明白就要做什么,我看你给出的例子就很好。
我的回答是基于你要在txtsetup.sif中每一行前面加上;;来写的。
type txtsetup.sif 是显示该文件的内容
| 将所有内容通过管道送到下一个程序。
lmod /L* ;;[] 是用来将管道中每一行前面加上;;
> txtsetup.new是将lmod修改过的内容转向到txtsetup.new文件中。
下一步,你可以用:
copy /y txtsetup.new txtsetup.sif
把新文件替换你要修改的文件。
回复

使用道具 举报

6#
 楼主| 发表于 2004-8-12 16:06:00 | 只看该作者

[求助]如何用批处理修改(替换)文件中的特定字符

不好意思,也许是我没有表达清楚.我需要的不是每一行都加上;;
还是说一个具体的例子:
比如在layout.inf中,有如下几行
vgaoem.fon   = 1,,5168,,,,3_,22,0,0,,1,2
acpi.sys     = 100,,185600,,,,3_,4,1,,,1,4
wmilib.sys   = 1,,4352,,,,3_,4,0,0,,1,4
atapi.sys    = 100,,95360,,,,4_,4,0,0,,1,4
disk.sys     = 100,,36352,,,,5_,4,0,0,,1,4
classpnp.sys = 100,,49664,,,,5_,4,0,0,,1,4
dmio.sys     = 100,,151808,,,,4_,4,0,0,,1,4
dmload.sys   = 1,,5888,,,,4_,4,0,0,,1,4
ftdisk.sys   = 1,,125056,,,,3_,4,0,0,,1,4
intelide.sys = 100,,5504,,,,3_,4,1,,,1,4
pciidex.sys  = 100,,25088,,,,3_,4,0,0,,1,4
isapnp.sys   = 1,,35840,,,,3_,4,1,,,1,4
我想在其中
classpnp.sys = 100,,49664,,,,5_,4,0,0,,1,4
dmio.sys     = 100,,151808,,,,4_,4,0,0,,1,4

pciidex.sys  = 100,,25088,,,,3_,4,0,0,,1,4
前面添加;;
结果应该是这样的:
vgaoem.fon   = 1,,5168,,,,3_,22,0,0,,1,2
acpi.sys     = 100,,185600,,,,3_,4,1,,,1,4
wmilib.sys   = 1,,4352,,,,3_,4,0,0,,1,4
atapi.sys    = 100,,95360,,,,4_,4,0,0,,1,4
disk.sys     = 100,,36352,,,,5_,4,0,0,,1,4
;;classpnp.sys = 100,,49664,,,,5_,4,0,0,,1,4
;;dmio.sys     = 100,,151808,,,,4_,4,0,0,,1,4
dmload.sys   = 1,,5888,,,,4_,4,0,0,,1,4
ftdisk.sys   = 1,,125056,,,,3_,4,0,0,,1,4
intelide.sys = 100,,5504,,,,3_,4,1,,,1,4
;;pciidex.sys  = 100,,25088,,,,3_,4,0,0,,1,4
isapnp.sys   = 1,,35840,,,,3_,4,1,,,1,4

按照你上面说的办法,如果我没有理解错误文件好像就修改成了这个样子:
;;vgaoem.fon   = 1,,5168,,,,3_,22,0,0,,1,2
;;acpi.sys     = 100,,185600,,,,3_,4,1,,,1,4
;;wmilib.sys   = 1,,4352,,,,3_,4,0,0,,1,4
;;atapi.sys    = 100,,95360,,,,4_,4,0,0,,1,4
;;disk.sys     = 100,,36352,,,,5_,4,0,0,,1,4
;;classpnp.sys = 100,,49664,,,,5_,4,0,0,,1,4
;;dmio.sys     = 100,,151808,,,,4_,4,0,0,,1,4
;;dmload.sys   = 1,,5888,,,,4_,4,0,0,,1,4
;;ftdisk.sys   = 1,,125056,,,,3_,4,0,0,,1,4
;;intelide.sys = 100,,5504,,,,3_,4,1,,,1,4
;;pciidex.sys  = 100,,25088,,,,3_,4,0,0,,1,4
;;isapnp.sys   = 1,,35840,,,,3_,4,1,,,1,4
这样是不行的

回复

使用道具 举报

7#
发表于 2004-8-12 16:46:09 | 只看该作者

[求助]如何用批处理修改(替换)文件中的特定字符

关键就是我怎么知道你在哪几行前面加上;;呢?你先确定了这个问题,再想办法解决后面的问题。
回复

使用道具 举报

8#
 楼主| 发表于 2004-8-12 16:56:03 | 只看该作者

[求助]如何用批处理修改(替换)文件中的特定字符

上面我不是给了一个layout文件么,我要加;;的行也给了呢!
源文件太大,没有办法全贴上来,而且是好几个文件.
所以我想要一个样本文件,然后自己照猫画虎,呵呵
如果你想看,可以参考http://bbs.wwwfox.net/cgi-bin/topic.cgi?forum=34&topic=3696&show=0 这个帖子,我想要这个批处理就是为了简化其中手工操作的过程的.
回复

使用道具 举报

9#
发表于 2004-8-12 17:28:13 | 只看该作者

[求助]如何用批处理修改(替换)文件中的特定字符

好,你说明白了,我的解决方案也就来了,不过解决方案有些复杂,因为你的问题也比较复杂,这次是使用sed,sed是UNIX下的工具,全名是Stream Editor,我也是刚学会简单用这个命令(详细的用法请google),下面是这个程序的下载链接。
点击下载sed.exe(205KB)
下载后,放到当前系统的搜索路径中即可,这个sed应该是只能运行在windows系统的命令提示符下,能不能运行于纯DOS环境我不能保证。
我这里就以layout.inf为例讲一下怎么在指定行前面加上;;。
首先你建立一个文件,名为layout.sed,内容如下:
/classpnp.sys/s/^/;;/g
/dmio.sys/s/^/;;/g
/pciidex.sys/s/^/;;/g
你可以看到,第一个/后面就是你要加注释的那些行的文件名字,你想加入更多也可以,这个文件的目的是告诉sed在哪些行前面加上;;。
建立好这个文件后,将这个文件与layout.inf放在同一个目录下,进入这个目录,执行下面的命令:
sed -f layout.sed layout.inf > layout.new
if exist layout.old del /f /q layout.old
ren layout.inf layout.old
ren layout.new layout.inf
现在layout.inf就是已经修改好的,而原来的保存到layout.old文件中了。
回复

使用道具 举报

10#
发表于 2004-8-12 17:31:40 | 只看该作者

[求助]如何用批处理修改(替换)文件中的特定字符

在下面这个帖子中有很多关于sed如何使用的介绍,由DOS联盟论坛的twf_cc朋友推介的,很复杂,我现在也只是一知半解,其实我就是从这个帖子才开始学习使用这个命令的:
http://dos.e-stone.cn/dosbbs/dis ... ID=13180&page=1
回复

使用道具 举报

11#
 楼主| 发表于 2004-8-12 18:09:10 | 只看该作者

[求助]如何用批处理修改(替换)文件中的特定字符

多谢!
我测试完成后再来报告!
你给的链接,我看了,呵呵,看的发蒙。
不啃那些东西了,只要能解决问题就好。
回复

使用道具 举报

12#
发表于 2004-8-12 18:19:37 | 只看该作者

[求助]如何用批处理修改(替换)文件中的特定字符

死性不改的解决办法使用起来可能会更简单一些,但实现起来却要比我的复杂多了。
回复

使用道具 举报

13#
 楼主| 发表于 2004-8-15 21:14:18 | 只看该作者

[求助]如何用批处理修改(替换)文件中的特定字符

试验txtsetup.sif文件,不成功。
命令:
sed -f txtsetup.sed txtsetup.sif > txtsetup.new
if exist txtsetup.old del /f /q txtsetup.old
ren txtsetup.sif txtsetup.old
ren txtsetup.new txtsetup.sif
txtsetup.sed:
/WINABC.CNT/s/^/;;/g
/WINABC.HLP/s/^/;;/g
/WINABC/s/^/;;/g
/WINABC/s/^/;;/g
/WINABC/s/^/;;/g
/WINGB/s/^/;;/g
/WINIME/s/^/;;/g
/WINPY/s/^/;;/g
/WINSP/s/^/;;/g
/WINZM/s/^/;;/g
/PINTL/s/^/;;/g
/IMSCINST.EXE/s^/;;/g
/PMIGRATE.DLL/s/^/;;/g
/imepad/s/^/;;/g
/imlang.dll/s/^/;;/g
/padrs804.dll/s/^/;;/g
最后txtsetup.sif:
Invalid keyboard code specified
回复

使用道具 举报

14#
发表于 2004-8-16 08:41:38 | 只看该作者

[求助]如何用批处理修改(替换)文件中的特定字符

估计可能是sed所用的代码页与你系统cmd窗口的默认代码页不同,你试着在sed命令前面加上:
chcp 437
这个命令。
另外,我在jujumao论坛将我写的命令又完善了一下,现在可以兼容死性不改的程序了,你再去拿新的来看看,注意,还是要注意代码页的问题。不过我的sed在中文代码页(936)下并没有出问题啊。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-8-9 13:02

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表