1. 简介

批处理并没有直接读写ini文件的功能。所以只能通过读取文件内容分析比较来找到相应段名、键名对应位置,然后提取相应字符串来做为读。写则是找到键名对应的内容,然后进行替换,重新新的文件然后覆盖原文件。

2. 读取

2.1. 前期处理

要求输出的参数有配置文件路径、段名、键名。并且这3个字符串都需要进行Trim处理,即消除字符串前后可能存在的空格,提升代码的兼容性与可靠性。
代码中用了3个代码标签希,提供Trim功能,其中利用到递归达到去除所有的空格。

2.2. 代码

@echo offcall :Begin "%~1" "%~2" "%~3" :TrimLeft
set "var=%~1"
if "%var:~0,1%"==" " call :TrimLeft "%var:~1%"
goto :eof:TrimRight
set "var=%~1"
if "%var:~-1%"==" " call :TrimRight "%var:~0,-1%"
goto :eof:Trim
call :TrimLeft "%%~1%"
call :TrimRight "%var%"
goto :eof:Begin
set "filePath=%~1"
call :Trim "%filePath%"
set "filePath=%var%"
set "section=%~2"
call :Trim "%section%"
set "section=[%var%]"
set "Key=%~3"
call :Trim "%Key%"
set "Key=%var%"rem find是获取包括指定字符串的行号[linenumber]
rem usebackq表示in中的路径可能包含空格,delims=[]提取find找到的行号
for /f "usebackq delims=[]" %%i in (`find /i "%section%" /n %filepath%`) do set sectionName=%%isetlocal EnableDelayedExpansion
rem token表示分配的字符串取前2个,按%%i自加,delims==表示以=分隔,skip表示跳过指定行数
for /f "usebackq tokens=1,2 delims== skip=%sectionName%" %%i in (`type %filepath%`) do (set "KeyDst=%%i"call :Trim "!KeyDst!"set "KeyDst=!var!"set "Value=%%j"call :Trim "!Value!"set "Value=!var!"rem 找到下一个section[时退出set "a=%%i"if "!a:~0,1!"=="[" goto :eofif "!KeyDst!"=="%Key%" (echo key:%%iecho value:!Value!goto :eof))
)
goto :eof

3. 修改

3.1. 前期处理

依然是要处理参数的空格问题。另外就是先找段名,再找到键名,再直接替换原有的内容,并生成到临时文件中。操作完之后,将临时文件替换原文件,并删除临时文件。有一点遗憾的是分号自动消除了,无法注释。

3.2. 代码

@echo off >temp.inicall :Begin "%~1" "%~2" "%~3" "%~4":TrimLeft
set "var=%~1"
if "%var:~0,1%"==" " call :TrimLeft "%var:~1%"
goto :eof:TrimRight
set "var=%~1"
if "%var:~-1%"==" " call :TrimRight "%var:~0,-1%"
goto :eof:Trim
call :TrimLeft "%%~1%"
call :TrimRight "%var%"
goto :eof:Begin
set "filePath=%~1"
call :Trim "%filePath%"
set "filePath=%var%"
set "section=%~2"
call :Trim "%section%"
set "section=[%var%]"
set "Key=%~3"
call :Trim "%Key%"
set "Key=%var%"
set "Val=%~4"
call :Trim "%Val%"
set "Val=%var%"@echo off >tmp.inisetlocal EnableDelayedExpansion
set /a flag=0
rem token表示分配的字符串取前2个,按%%i自加,delims==表示以=分隔,skip表示跳过指定行数
for /f "usebackq tokens=1* delims== " %%i in (`type %filepath%`) do (set "KeyDst=%%i"call :Trim "!KeyDst!"set "KeyDst=!var!"if "!var:~0,1!"=="[" (echo.>>tmp.iniecho %%i>>tmp.iniecho %%i|find "%section%">nul&&set /a flag=1) else (if !flag!==1 (if "!KeyDst!"=="%Key%" ( echo %key%=%Val%>>tmp.iniset /a flag=0) else (if %%j=="" (echo %%i>>tmp.ini) else echo %%i=%%j>>tmp.ini)) else (if defined %%j (echo %%i>>tmp.ini) else echo %%i=%%j>>tmp.ini))
)
copy tmp.ini %filepath% /y >nul||(attrib -s -a -r -h %filepath%& copy tmp.ini %filepath% /y >nul)
del tmp.iniecho finish
goto :eof

批处理之读写ini配置文件相关推荐

  1. python读取配置文件 分段_Python3读写ini配置文件的示例

    ini文件即Initialization File初始化文件,在应用程序及框架中常作为配置文件使用,是一种静态纯文本文件,使用记事本即可编辑. 配置文件的主要功能就是存储一批变量和变量值,在ini文件 ...

  2. C# 读写ini配置文件demo

    INI就是扩展名为"INI"的文件,其实他本身是个文本文件,可以用记事本打工,主要存放的是用户所做的选择或系统的各种参数. INI文件其实并不是普通的文本文件.它有自己的结构.由若 ...

  3. C/C++ ini配置文件的格式及如何读写ini配置文件

    一.ini配置文件的格式 为什么要用INI文件?如果我们程序没有任何配置文件时,这样的程序对外是全封闭的,一旦程序需要修改一些参数必须要修改程序代码本身并重新编译,这样很不好,所以要用配置文件,让程序 ...

  4. C# 读写ini配置文件

     C# 读写ini配置文件 一.简述  记--c#通过调用系统api接口进行简单读写ini配置文件. 例子打包:外链:https://wwa.lanzoui.com/b0c9nm3pa 密码:8maq ...

  5. C++读写ini配置文件GetPrivateProfileString()WritePrivateProfileString()

    转自:http://hi.baidu.com/andywangcn/blog/item/10ba730f48160eeb37d122e9.html 配置文件中经常用到ini文件,在VC中其函数分别为: ...

  6. 【转载】C++读写ini配置文件GetPrivateProfileString()WritePrivateProfileString()

    配置文件中经常用到ini文件,在VC中其函数分别为: #include <Windows.h> //wince,WMobile.ppc不支持这几个函数 写入.ini文件:bool Writ ...

  7. 【Y忍冬草】QT读写ini配置文件

    文章目录 1.ini文件格式 2. ini配置文件的读写.删除 3. 结果 4.源码下载  在我们进行软件系统开始时,对于一些参数我们需要进行配置,这时我们就会用ini类型的配置文件.其实我们在很多软 ...

  8. QT中如何读写ini配置文件

    本文首发于「3D视觉工坊」知识星球. 如图1所示,我们需要在QT界面中实现手动读取参数存放的位置,那么我们该如何做呢? 方法:读取ini格式的配置文件,实现路径的写入与读取. 第一步:界面构造函数中, ...

  9. 【Python教程】读写ini配置文件的详细操作

    ini文件即Initialization File初始化文件,在应用程序及框架中常作为配置文件使用,是一种静态纯文本文件,使用记事本即可编辑. 配置文件的主要功能就是存储一批变量和变量值,在ini文件 ...

最新文章

  1. Waymo高管指责媒体夸大自动驾驶的商业化前景
  2. matlab练习程序(图像放大/缩小,最邻近插值)
  3. Linux中添加和删除用户
  4. php读取mp3信息,PHP获取MP3的媒体标签信息
  5. 深入理解计算机的字长
  6. Nocatalog 下的RMAN 增量备份 shell脚本
  7. 欢迎来到Python循环小课堂
  8. Web前端开发必学15大技术
  9. JavaScript:判断当前浏览器是否为微信浏览器
  10. vue导入静态js_vue引入静态js文件的方法
  11. .NET根本权限管理框架源代码
  12. python保存图片到指定路径_[Python03] 5分钟学会3种方法给模块添加路径!
  13. linux下查看文件inode,Linux下如何寻找相同文件?
  14. 童年计算机课企鹅游戏,这些童年游戏,你一定玩过
  15. Android 实现图文混排
  16. 【互动媒体技术】有关十二个“一”的文艺创作-拓展
  17. 决赛名单出炉!“云”上巅峰群雄竞
  18. daimayuan每日一题#814 排队
  19. 3个妙招,克服面试焦虑,紧张
  20. 即插即涨2-3%!AC-FPN:用于目标检测的注意力引导上下文的特征金字塔网络

热门文章

  1. Codeforces 1379B.Dubious Cyrpto
  2. python中的header_python中header是什么意思
  3. android相机权限xml,Android相机权限检测兼容问题
  4. NOIP2003 侦探推理
  5. PTA 最大和最小 (10 分)请使用指针法(间接访问)编写程序,程序的功能是从键盘输入 10 个数,求其最大值和最小值的差。
  6. css浮动,清除浮动,溢出属性,定位,设置透明度
  7. 如何在AppSec测试中处理SAST FPs
  8. python保存图片
  9. 全球重力异常值和磁场异常值提取
  10. 犹他州计算机科学,犹他州大学计算机科学computer science专业排名第201~250名(2020THE泰晤士高等教育世界大学排名)...