Board logo

标题: [文本处理] 批处理怎样修改ini文件? [打印本页]

作者: wufeishi    时间: 2011-3-3 19:34     标题: 批处理怎样修改ini文件?

.......
[login]
outletcode=01
username=0103
programno=01
language=0
.......

想用批处理修改ini文件中programno的值,在01和02两个数切换。即programno=01,programno=02。

programno在第29行。

请问可以用bat实现吗?

作者: weichenxiehou    时间: 2011-3-3 22:09

估计很好实现,假设要修改的ini文件为test.ini,把下面的代码制成bat文件放到相同目录下,运行一次就切换一次。
  1. @echo off
  2. (for /f "tokens=2 delims=:" %%i in ('findstr /n .* test.ini') do (
  3.     set "str=%%i"
  4.     set/a n+=1
  5.     setlocal enabledelayedexpansion
  6.     if !n! equ 29 (set flag=1&if "!str!"=="programno=01" (echo programno=02)else echo programno=01)else set flag=
  7.     if not defined flag echo !str!
  8.     endlocal
  9. ))>new.ini
  10. move /y new.ini test.ini
复制代码

作者: CrLf    时间: 2011-3-3 22:33

不知道这样行不行,未测试:
  1. @echo off&setlocal enabledelayedexpansion >nul 3>2.txt
  2. for /f "tokens=1* delims==" %%a in (1.ini) do if "%%a"=="programno" (
  3. set /a n=^!(1%%b-101)+101
  4. echo %%a=!n:~1!
  5. ) else echo %%a=%%b
  6. move 2.txt 1.ini
复制代码

作者: weichenxiehou    时间: 2011-3-4 08:46     标题: 回复 3楼 的帖子

替换01和02的方法很妙,不过好像没有等号的行会在后面多一个等号……而且好像最后一句move命令的正确输出也会重定向到2.txt中,而且此时句柄1关联到2.txt,貌似不能move,括号前应该需要转义字符,不过我运行了一下,没有成功切换,望解答。

[ 本帖最后由 weichenxiehou 于 2011-3-4 08:59 编辑 ]
作者: wc726842270    时间: 2011-3-4 15:06

sed下载http://plp626.ys168.com/
  1. @echo off
  2. for /f "tokens=1-3 delims==:" %%i in ('findstr /nic:"programno=" a.ini') do echo 当前a.ini中progamno的值%%k,行数为%%i
  3. set /p b=请指定操作行:(参考上面)
  4. set /p a=请输入操作值:(1或2)
  5. (for /f "delims=" %%i in ('sed %b%s/0[12]/0%a%/ a.ini') do echo %%i)>2.ini
  6. if exist 2.ini (del a.ini&& ren 2.ini a.ini)
复制代码





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