标题: [文本处理] [分享]批处理在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- @echo off
- (for /f "tokens=1* delims=:" %%i in ('type "D:\Hisense\MISCMP\HsCMP.ini" ^| findstr /n .*') do (
- echo,%%j
- if "%%j" equ "AppServerCount=1" (
- echo multirun=1
- )
- ))>"%temp%\HsCMP.ini"
- 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# 差点就很帅
加个功能- @echo off
- set errorlevel=0
- (for /f "tokens=1* delims=:" %%i in ('type "D:\Hisense\MISCMP\HsCMP.ini" ^| findstr /n .*') do (
- echo,%%j
- if "%%j" equ "AppServerCount=1" (
- echo multirun=1
- )
- ))>"%temp%\HsCMP.ini"
- move /y "%temp%\HsCMP.ini" "D:\Hisense\MISCMP\"
- rem 判断是否执行成功
- if "%errorlevel%"=="1" echo 操作失败请按任意键继续....
- if "%errorlevel%"=="0" echo 操作完成请按任意键继续....
- pause>nul
- 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
一般没这么干的。
如果确实需要显示是否成功,可以在代码开始执行时就判断一下,不符合修改条件就直接跳到最后。- @echo off
- findstr /x "AppServerCount=1" D:\Hisense\MISCMP\HsCMP.ini>nul 2>nul
- if errorlevel 1 (
- echo 操作失败&goto :a
- ) else (
- echo 操作成功
- )
- ...
- :a
- 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 |