Board logo

标题: [文本处理] 批处理读取INI的问题 [打印本页]

作者: clock874    时间: 2021-3-4 11:45     标题: 批处理读取INI的问题

搜索了一下,好像是不同小节下相同键值的不能读取。比如我的ini是这样的:
[1]
pcname=PC-001
ip=192.168.1.101
zw=255.255.255.0
wg=192.168.1.1
dns1=8.8.8.8
dns2=4.4.4.4

[2]
pcname=PC-002
ip=192.168.1.102
zw=255.255.255.0
wg=192.168.1.1
dns1=8.8.8.8
dns2=4.4.4.4

[3]
pcname=PC-003
ip=192.168.1.103
zw=255.255.255.0
wg=192.168.1.1
dns1=8.8.8.8
dns2=4.4.4.4


我要读取3小节下面的pcname键值,是要怎么写?
作者: 路过    时间: 2021-3-4 12:17

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set f3=0
  4. for /f "dellims=" %%a in (1.ini) do (
  5.     set f0=%%a
  6.     set f2=!f0:~0,2!
  7.     if !f3!==1 (set %%a)
  8.     if "!f2!"=="[3" (
  9.         set f3=1
  10.     ) else (
  11.         set f1=!f0:~0,1!
  12.         if "!f1!"=="[" (set f3=0)
  13.     )
  14. )
  15. echo;%pcname%
  16. pause
  17. exit
复制代码

作者: clock874    时间: 2021-3-4 12:46

回复 2# 路过

感谢回复!

实际运行中有点儿问题,比如我ini里面有300个小节的话,两位数的小节不能识别,而且1小节和11小节和111小节会不会有错误?
作者: qixiaobin0715    时间: 2021-3-4 13:27

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in (1.ini) do (
  4.     if "%%a"=="[3]" (
  5.         set n=true
  6.     ) else if !n!==true (
  7.         set str=%%a
  8.         echo !str:~-6!
  9.         goto :o
  10.     )
  11. )
  12. :o
  13. pause
  14. exit
复制代码

作者: clock874    时间: 2021-3-4 13:48

回复 4# qixiaobin0715


感谢回复,实际运行中,能正常读取到pcname,但是怎么读ip和zw之类的?
作者: qixiaobin0715    时间: 2021-3-4 15:19

请一次把话说完:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,2 delims==" %%a in (1.ini) do (
  4.     if "%%a"=="[3]" (
  5.         set n=true
  6.     ) else if !n!==true (
  7.         if "%%a"=="[4]" goto :o
  8.         echo,%%b
  9.     )
  10. )
  11. :o
  12. pause
  13. exit
复制代码

作者: xczxczxcz    时间: 2021-3-4 15:24

保存为 xxx.ps1 右键运行
  1. $file="$(gl)\a.txt"; #加载文件
  2. $id=1;  #[数字]
  3. $r='0.0.0.0'; #替换内容
  4. $name='ip';  #替换标识
  5. [regex]::Replace([IO.File]::ReadAllText($file,[Text.Encoding]::Default),
  6. "(?ism)(?<=\[$id].*?$name=)(?:[^`r`n]+)",$r)|sc '.\new.log';
  7. &cmd /c pause;
复制代码





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