批处理之读写ini配置文件
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配置文件相关推荐
- python读取配置文件 分段_Python3读写ini配置文件的示例
ini文件即Initialization File初始化文件,在应用程序及框架中常作为配置文件使用,是一种静态纯文本文件,使用记事本即可编辑. 配置文件的主要功能就是存储一批变量和变量值,在ini文件 ...
- C# 读写ini配置文件demo
INI就是扩展名为"INI"的文件,其实他本身是个文本文件,可以用记事本打工,主要存放的是用户所做的选择或系统的各种参数. INI文件其实并不是普通的文本文件.它有自己的结构.由若 ...
- C/C++ ini配置文件的格式及如何读写ini配置文件
一.ini配置文件的格式 为什么要用INI文件?如果我们程序没有任何配置文件时,这样的程序对外是全封闭的,一旦程序需要修改一些参数必须要修改程序代码本身并重新编译,这样很不好,所以要用配置文件,让程序 ...
- C# 读写ini配置文件
C# 读写ini配置文件 一.简述 记--c#通过调用系统api接口进行简单读写ini配置文件. 例子打包:外链:https://wwa.lanzoui.com/b0c9nm3pa 密码:8maq ...
- C++读写ini配置文件GetPrivateProfileString()WritePrivateProfileString()
转自:http://hi.baidu.com/andywangcn/blog/item/10ba730f48160eeb37d122e9.html 配置文件中经常用到ini文件,在VC中其函数分别为: ...
- 【转载】C++读写ini配置文件GetPrivateProfileString()WritePrivateProfileString()
配置文件中经常用到ini文件,在VC中其函数分别为: #include <Windows.h> //wince,WMobile.ppc不支持这几个函数 写入.ini文件:bool Writ ...
- 【Y忍冬草】QT读写ini配置文件
文章目录 1.ini文件格式 2. ini配置文件的读写.删除 3. 结果 4.源码下载 在我们进行软件系统开始时,对于一些参数我们需要进行配置,这时我们就会用ini类型的配置文件.其实我们在很多软 ...
- QT中如何读写ini配置文件
本文首发于「3D视觉工坊」知识星球. 如图1所示,我们需要在QT界面中实现手动读取参数存放的位置,那么我们该如何做呢? 方法:读取ini格式的配置文件,实现路径的写入与读取. 第一步:界面构造函数中, ...
- 【Python教程】读写ini配置文件的详细操作
ini文件即Initialization File初始化文件,在应用程序及框架中常作为配置文件使用,是一种静态纯文本文件,使用记事本即可编辑. 配置文件的主要功能就是存储一批变量和变量值,在ini文件 ...
最新文章
- Waymo高管指责媒体夸大自动驾驶的商业化前景
- matlab练习程序(图像放大/缩小,最邻近插值)
- Linux中添加和删除用户
- php读取mp3信息,PHP获取MP3的媒体标签信息
- 深入理解计算机的字长
- Nocatalog 下的RMAN 增量备份 shell脚本
- 欢迎来到Python循环小课堂
- Web前端开发必学15大技术
- JavaScript:判断当前浏览器是否为微信浏览器
- vue导入静态js_vue引入静态js文件的方法
- .NET根本权限管理框架源代码
- python保存图片到指定路径_[Python03] 5分钟学会3种方法给模块添加路径!
- linux下查看文件inode,Linux下如何寻找相同文件?
- 童年计算机课企鹅游戏,这些童年游戏,你一定玩过
- Android 实现图文混排
- 【互动媒体技术】有关十二个“一”的文艺创作-拓展
- 决赛名单出炉!“云”上巅峰群雄竞
- daimayuan每日一题#814 排队
- 3个妙招,克服面试焦虑,紧张
- 即插即涨2-3%!AC-FPN:用于目标检测的注意力引导上下文的特征金字塔网络
热门文章
- Codeforces 1379B.Dubious Cyrpto
- python中的header_python中header是什么意思
- android相机权限xml,Android相机权限检测兼容问题
- NOIP2003 侦探推理
- PTA 最大和最小 (10 分)请使用指针法(间接访问)编写程序,程序的功能是从键盘输入 10 个数,求其最大值和最小值的差。
- css浮动,清除浮动,溢出属性,定位,设置透明度
- 如何在AppSec测试中处理SAST FPs
- python保存图片
- 全球重力异常值和磁场异常值提取
- 犹他州计算机科学,犹他州大学计算机科学computer science专业排名第201~250名(2020THE泰晤士高等教育世界大学排名)...