Board logo

标题: [文本处理] [分享]批处理在ini文件指定字符串的行下面增加一行 [打印本页]

作者: Batcher    时间: 2022-11-16 14:58     标题: [分享]批处理在ini文件指定字符串的行下面增加一行

【问题描述】

如何在D:\Hisense\MISCMP\HsCMP.ini 文件中
AppServerCount=1
换行追加
multirun=1
作者: Batcher    时间: 2022-11-16 14:59

【解决方案】

test_1.bat 请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
  1. @echo off
  2. (for /f "tokens=1* delims=:" %%i in ('type "D:\Hisense\MISCMP\HsCMP.ini" ^| findstr /n .*') do (
  3.     echo,%%j
  4.     if "%%j" equ "AppServerCount=1" (
  5.         echo multirun=1
  6.     )
  7. ))>"%temp%\HsCMP.ini"
  8. move /y "%temp%\HsCMP.ini" "D:\Hisense\MISCMP\"
复制代码

作者: 差点就很帅    时间: 2022-11-16 16:01

本帖最后由 差点就很帅 于 2022-11-16 16:03 编辑

感谢老大的指点,刚才测试成功。
我在后面增加了pause & exit
这样可以显示是否执行了,不过里面显示为移动了一个文件,怎么显示修改成功 按任意键继续?
作者: ANSL    时间: 2022-11-16 19:07

本帖最后由 ANSL 于 2022-11-16 19:09 编辑

回复 3# 差点就很帅
加个功能
  1. @echo off
  2. set errorlevel=0
  3. (for /f "tokens=1* delims=:" %%i in ('type "D:\Hisense\MISCMP\HsCMP.ini" ^| findstr /n .*') do (
  4.     echo,%%j
  5.     if "%%j" equ "AppServerCount=1" (
  6.         echo multirun=1
  7.     )
  8. ))>"%temp%\HsCMP.ini"
  9. move /y "%temp%\HsCMP.ini" "D:\Hisense\MISCMP\"
  10. rem 判断是否执行成功
  11. if "%errorlevel%"=="1" echo 操作失败请按任意键继续....
  12. if "%errorlevel%"=="0" echo 操作完成请按任意键继续....
  13. pause>nul
  14. exit
复制代码

作者: Batcher    时间: 2022-11-17 09:18

回复 3# 差点就很帅


    绝大部分情况下,exit 是多余的。
作者: qixiaobin0715    时间: 2022-11-17 10:24

本帖最后由 qixiaobin0715 于 2022-11-17 10:32 编辑

好像只能判断move命令是否成功执行,对于:
“换行追加
multirun=1”
是否成功则无效,我觉得这才是“差点就很帅”所要的结果。
作者: aloha20200628    时间: 2022-11-17 12:00

试试最后加一行findstr ... &&echo,成功||echo,失败
其中省略号请自行填充
作者: qixiaobin0715    时间: 2022-11-17 13:23

一般没这么干的。
如果确实需要显示是否成功,可以在代码开始执行时就判断一下,不符合修改条件就直接跳到最后。
  1. @echo off
  2. findstr /x "AppServerCount=1" D:\Hisense\MISCMP\HsCMP.ini>nul 2>nul
  3. if errorlevel 1 (
  4.     echo 操作失败&goto :a
  5. ) else (
  6.     echo 操作成功
  7. )
  8. ...
  9. :a
  10. pause
复制代码

作者: qixiaobin0715    时间: 2022-11-17 13:45

假设4楼代码不存在其它问题,那么第2行也是多余的吧。
作者: terse    时间: 2022-11-17 21:25

本帖最后由 terse 于 2022-11-17 21:36 编辑
假设4楼代码不存在其它问题,那么第2行也是多余的吧。
qixiaobin0715 发表于 2022-11-17 13:45

4楼第2行应该是判断有没有添加成功所设置的条件

看花了  原以为前面设置一个值 中间符合条件了再重新定义的 结果没有
假如第二行 set err=0
echo multirun=1那里 set err=1
然后后面再根据err的值判断是不是执行MOVE
作者: qixiaobin0715    时间: 2022-11-18 09:46

本帖最后由 qixiaobin0715 于 2022-11-18 09:48 编辑

每个代码都是有条件的,顶楼已经把环境说的很清楚了。
a.必须存在D:\Hisense\MISCMP\HsCMP.ini 文件;
b.文件中必须有1行为AppServerCount=1
满足上述2个条件,才能成立且无需判断是否成功。
如果非要较真不可,可以分为3情况:
1.不存在指定的ini文件。只是临时目录中生成一个空的文件HsCMP.ini。
2.存在指定的ini文件,但文件中没有“AppServerCount=1”这一行字符。会在临时目录中生成与指定文件一模一样的副本文件HsCMP.ini,然后移动到指定目录覆盖原有的文件HsCMP.ini。
3.满足上面a、b 2个条件,会在临时目录中生成修改后的文件副本,然后覆盖原文件。
第2种情况无实际意义,多此一举;第1种情况更不用说,会报错。所以8楼代码在前2种情况下,直接就跳到代码的最后面,只有满足第3种才会运行所有代码。




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