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

[文本处理] 批处理读取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键值,是要怎么写?

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

TOP

回复 2# 路过

感谢回复!

实际运行中有点儿问题,比如我ini里面有300个小节的话,两位数的小节不能识别,而且1小节和11小节和111小节会不会有错误?

TOP

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

TOP

回复 4# qixiaobin0715


感谢回复,实际运行中,能正常读取到pcname,但是怎么读ip和zw之类的?

TOP

请一次把话说完:
  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
复制代码

TOP

保存为 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;
复制代码
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

返回列表