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

[文本处理] 批处理修改ini文件中指定节点的键值

本帖最后由 670422423 于 2023-7-28 17:57 编辑

[SERVER_DATA_1]
SERVER_USER=123
SERVER_PASSWORD=123
[SERVER_DATA_2]
SERVER_USER=456
SERVER_PASSWORD=456
文件内容,文件格式为.ini,需要修改的内容如上示例,需要修改[SERVER_DATA_2]节点下SERVER_USER,SERVER_PASSWORD的值,并且文件所在路径中有空格“D:\Program Files (x86)\”
求大佬帮忙,报酬您说。
系统为win7

回复 2# zaqmlp


    不能用

TOP

回复 3# Batcher


    可以在原文件上修改,不生成新的ini文件吗

TOP

回复  670422423

请参考Q-04和Q-05把bat文件和ini文件都保存为ANSI编码:
批处理读取ini文件内容并修改 ...
Batcher 发表于 2023-7-28 17:58



    实测可以修改,并生成新的ini文件,但是与原文件不太一样 好像把中间空行删除了。

TOP

回复 7# Batcher


    感谢管理员大佬。

TOP

本帖最后由 670422423 于 2023-7-31 16:38 编辑

回复 18# Batcher


    这个bat只能在原目录使用吧,要想在其他目录使用,比如文件在D:\Program Files (x86)\program\123.ini
然后把set "FileOld=123.ini"改为"FileOld=D:\Program Files (x86)\123.ini" 会报错 提示“系统找不到文件 \Program Files (x86)\123.ini"。”

TOP

回复 21# Batcher


    感谢大佬指点迷津,问题已解决。以下是修改过的代码。
  1. @echo off
  2. rem cd /d "%~dp0"
  3. setlocal EnableDelayedExpansion
  4. rem set "INPUT_FILE=file.txt"
  5. set "INPUT_FILE=D:\Program Files (x86)\input.ini"
  6. set "OUTPUT_FILE=D:\Program Files (x86)\output.ini"
  7. set "DATE_TIME=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%"
  8. set "BAK_FILE=D:\Program Files (x86)\common_bak%DATE_TIME%.ini"
  9. copy "%INPUT_FILE%" "%BAK_FILE%"
  10. rem 删除上次的输出文件
  11. if exist "%OUTPUT_FILE%" del "%OUTPUT_FILE%"
  12. for /f "usebackq tokens=1,2 delims=:" %%o in (`findstr /n .* "%INPUT_FILE%"`) do (
  13.   rem echo %%p
  14.   if "%%p" equ "" (
  15.     rem 输出空行
  16.     echo. >>"%OUTPUT_FILE%"
  17.   ) else (
  18.       for /f "tokens=1* delims==" %%c in ("%%p") do (
  19.     if /i "%%c"=="[SERVER_DATA_3]" (
  20.       set "Mod_flag=true"
  21.       rem echo ----------------!Mod_flag!------------
  22.     )
  23.     rem 包含字符串“#""[”则仅输出%%c,否则进行修改
  24.     echo %%c| findstr "# [" >nul && (
  25.           set line=%%c
  26.         ) || (
  27.   rem 修改键值对
  28.   if /i "!Mod_flag!" equ "true" (   
  29.         if /i "%%c" == "SERVER_USER" (
  30.           rem echo %%d
  31.           set line=%%c=cccccc
  32.   set "ChangeU=true"
  33.         ) else if /i "%%c" == "SERVER_PASSWORD" (
  34.            rem echo %%d
  35.           set line=%%c=cccccc
  36.   set "ChangeP=true"
  37.         ) else (
  38.           set line=%%c=%%d
  39.         )
  40. rem 全部修改完毕后,重置Mod_flag标识
  41. if /i "!ChangeU!" equ "true" (
  42.   if /i "!ChangeP!" equ "true" (
  43.     set "Mod_flag=false"
  44.   )
  45. )
  46.   ) else (
  47.         set line=%%c=%%d
  48.       )
  49.         )
  50.         REM 在此处修改line变量的值
  51.         echo !line!>>"%OUTPUT_FILE%"
  52.       )
  53.     )
  54. )
  55. move /y "%OUTPUT_FILE%" "%INPUT_FILE%"
  56. endlocal
  57. echo  "文件处理完成"
  58. pause
复制代码

TOP

返回列表