[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理如何替换文本中某一行的内容?

现有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。
请教各位大神、大侠、大哥、大姐们,跪谢!
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

从8点学到现在,都没搞出来,看在这份上,高手给个答案吧

TOP

  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
复制代码
1

评分人数

TOP

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

评分人数

TOP

回复 3# CrLf


    感谢版主大大,太好了,可以回去跟同事装一把了,呵呵。

TOP

回复 4# find


    感谢你的回帖。谢谢。

TOP

返回列表