Board logo

标题: [文本处理] [已解决]批处理如何替换文本中某一行的内容? [打印本页]

作者: hdxiaoni    时间: 2012-3-21 02:31     标题: [已解决]批处理如何替换文本中某一行的内容?

现有win.ini文件如下:
[pmsstartup.exe]
serverConfig=http://10.141.183.114:8080/config.pmssd.xml  

http://10.141.183.115:8080/config.pmssd.xml
installPath=c:\program files\pms
installPath_1=e:\我的文档\桌面\新建文件夹
serverConfig_1=http://10.141.183.116:8080/config.pmssd.xml
[DMS]
runpath=C:\Program Files\PMS\bin
[山东电力集团公司PMS系统]
LastLogin=popo
pwd=+

想把“[山东电力集团公司PMS系统]”行下面的一行,替换为LastLogin=zl,请问用批处理如何做到?
注:该win.ini文件根据系统安装软件的不同,会发生变化,故不能用指定行序号来确定LastLogin这一行的位置。但其上一行是确定的名称,可通过找到“[山东电力集团公司PMS系统]”行找到该行。
   LastLogin这一行记录的是最后一个登录的用户名,会随时发生变化,我想运行批处理后,改成我自己的用户名zl。
请教各位大神、大侠、大哥、大姐们,跪谢!
作者: hdxiaoni    时间: 2012-3-21 02:34

从8点学到现在,都没搞出来,看在这份上,高手给个答案吧
作者: CrLf    时间: 2012-3-21 05:13

  1. @echo off
  2. (for /f "delims=" %%a in (win.ini) do (
  3.    if defined t (
  4.       set t=
  5.       echo LastLogin=zl
  6.    )else echo;%%a
  7.    if %%a==[山东电力集团公司PMS系统] set t=1
  8. ))>tmp.ini
复制代码
或者判断当前行是否为 LastLogin=xxx :
  1. @echo off
  2. (for /f "delims=" %%a in (win.ini) do (
  3.    for /f "delims==" %%b in ("%%a") do (
  4.       if %%b==LastLogin (
  5.          echo LastLogin=zl
  6.       ) else echo;%%a
  7.    )
  8. ))>tmp.ini
复制代码
如果要覆盖原文件,在脚本末尾加一句:
  1. move /y tmp.ini win.ini
复制代码

作者: find    时间: 2012-3-21 20:19

  1. sed -i "/\[山东电力集团公司PMS系统\]/{N; s/\n.*/\nLastLogin=zl/}" win.ini
复制代码

作者: hdxiaoni    时间: 2012-3-21 22:17

回复 3# CrLf


    感谢版主大大,太好了,可以回去跟同事装一把了,呵呵。
作者: hdxiaoni    时间: 2012-3-21 22:17

回复 4# find


    感谢你的回帖。谢谢。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2