Board logo

标题: [文本处理] 请教批处理怎样批量修改文本文件非指定内容? [打印本页]

作者: psstudio    时间: 2023-2-6 20:52     标题: 请教批处理怎样批量修改文本文件非指定内容?

同一目录下有key.ini 和01.ini -30.ini,一共31个文件,key.ini内容如下(一共15行):
key_AAA2643203=8888887933474184767148441
key_AAA2658059=8888888189469114921248441
key_AAA2645041=8888887933469084716348441
key_AAA2646222=8888887933474214741748441
key_AAA2646908=8888887933492134895148441
key_AAA2659022=8888888189469124741748441
key_AAA2654670=8888888189484434691048441
key_AAA2654607=8888888189484434869548441
key_AAA2654808=8888888189489554895148441
key_AAA2654950=8888888189492114690848441
key_AAA2655667=8888888189484444870148441
key_AAA2655853=8888888189489564767648441
key_AAA2657296=8888888189474224844848441
key_AAA2657431=8888888189479344716248441
key_AAA2658331=8888888189476794716248441
01.ini文件内容如下:
[work]
time=10
[tuxiang]
name=1024768
[kill]
pd=1
[user]
name=aaa
[Last]
EntryName=bohao
Save=1
keyName=AAA2643203
key=4737447933474184767148441
现需要把key.ini的内容逐行读取到单数的如:01.ini 03.ini 05.ini内修改最后的两行内容,请教大神们的写法~
作者: hlzj88    时间: 2023-2-6 22:30

保存为ansi格式,注意保护原文件。
  1. @echo off&setlocal enabledelayedexpansion
  2. set p=-1
  3. for /f "tokens=2,3 delims=_^=" %%i in (key.ini) do (
  4.   set /a p+=2
  5.   set w=00!p!
  6.   set w=!w:~-2!
  7.   findstr /iv "key" !w!.ini>>f.ini
  8.   echo keyName=%%i>>f.ini
  9.   echo key=%%j>>f.ini
  10.   move /y f.ini !w!.ini
  11. )
  12. pause
复制代码

作者: psstudio    时间: 2023-2-6 23:12

回复 2# hlzj88


   老大,如果01.ini 03.ini 05.ini的内容变成这样:
01.ini文件内容如下:
[work]
time=10
[tuxiang]
name=1024768
[kill]
pd=1
[user]
name=aaa
[Last]
EntryName=bohao
Save=1
UserName=AAA2643203
Password=4737447933474184767148441
最后两行的内容没有相同的如KEY的关键字,这种情况又怎么判断呢?
作者: psstudio    时间: 2023-2-6 23:52

回复 3# psstudio


    群里大佬指点了一下,可以这样修改:
   findstr /v "UserName Password" !w!.ini>>f.ini
可以用两个关键字!受教了~
作者: psstudio    时间: 2023-2-6 23:53

回复 2# hlzj88


    谢谢大佬指点! 你的代码最精简!效率很高!
作者: qixiaobin0715    时间: 2023-2-7 09:57

  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%a in ('dir /b /a-d *.ini^|findstr /x "[0-9][13579]\.ini"') do (
  3.     set /p str=
  4.     (for /f "tokens=1-2* delims=_=" %%i in ("!str!") do (
  5.         findstr /vil "keyName= key= UserName= Password=" "%%a"
  6.         echo,%%iName=%%j
  7.         echo,%%i=%%k
  8.     ))>temp
  9.     move /y "temp" "%%a"
  10. ))<key.ini
  11. pause
复制代码

作者: hfxiang    时间: 2023-2-7 11:00

回复 6# qixiaobin0715


又学到了一招for循环内set /p 的用法,谢谢




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