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

[文本处理] 批处理怎样修改ini文件?

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

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

programno在第29行。

请问可以用bat实现吗?

估计很好实现,假设要修改的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
复制代码
看得多说得多,远比不上写得多。

TOP

不知道这样行不行,未测试:
  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
复制代码

TOP

回复 3楼 的帖子

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

[ 本帖最后由 weichenxiehou 于 2011-3-4 08:59 编辑 ]
看得多说得多,远比不上写得多。

TOP

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)
复制代码
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

返回列表