Board logo

标题: [文本处理] 批处理怎样替换指定字符串? [打印本页]

作者: itachi    时间: 2011-2-25 11:47     标题: 批处理怎样替换指定字符串?

我要替换一个文本文件中的一个字符串后面部分为用户的输入内容,
例如在test.txt文件中
有一个字符串   autoupdate=false  
现在set /p var=INPUT:
让用户输入false或者true
然后用var 变量替换 字符串autoupdate=false 中的false  其他内容保持不变
试了各种方法都搞不定。。。

各位大虾给小弟指导一下吧,最好能有代码,跪谢了。。。
作者: batman    时间: 2011-2-25 12:16

  1. @echo off
  2. :start
  3. cls&set "var=a"&set /p var=请输入(1:false,2:true):
  4. for %%a in (false true) do if "%var%" equ "%%a" set flag=a
  5. if not defined flag goto start
  6. (for /f "delims=" %%a in (test.txt) do (
  7.        for /f "delims==" %%b in ("%%a") do (
  8.              if "%%b" equ "autoupdate" (
  9.                 echo autoupdate=%var%
  10.                 ) else (
  11.                 echo %%a
  12.              )
  13.        )
  14. ))>new.txt
  15. del /q test.txt&ren new.txt test.txt
复制代码

[ 本帖最后由 batman 于 2011-2-25 12:34 编辑 ]
作者: itachi    时间: 2011-2-25 14:53     标题: 感谢batman

太谢谢你啦
有个小问题 这个代码貌似不能保留空行啊 如果我想保留空行应该怎么处理啊
作者: wc726842270    时间: 2011-2-25 14:57     标题: 回复 2楼 的帖子

学习了。不过个人认为还是将%%b截取一定的位数再比较好。
作者: batman    时间: 2011-2-25 15:16

保留空行:
  1. @echo off&setlocal enabledelayedexpansion
  2. :start
  3. cls&set "var=a"&set /p var=请输入(1:false,2:true):
  4. for %%a in (false true) do if "%var%" equ "%%a" set flag=a
  5. if not defined flag goto start
  6. (for /f "delims=" %%a in ('findstr /n .* test.txt') do (
  7.        set "str=%%a"&set "strs=!str:*:=!"
  8.        if "!strs:~,10!" equ "autoupdate" (
  9.            echo autoupdate=%var%
  10.            ) else (
  11.            echo,!strs!
  12.        )
  13. ))>new.txt
  14. del /q test.txt&ren new.txt test.txt
复制代码

[ 本帖最后由 batman 于 2011-2-25 18:07 编辑 ]
作者: itachi    时间: 2011-2-25 16:07     标题: 感谢batman

感谢batman大虾这么热心,不过这个好像有点问题 我运行了 发现还是没有保留空行。。。
作者: batman    时间: 2011-2-25 18:08     标题: 回复 6楼 的帖子

5楼代码已修改。。。。
作者: Batcher    时间: 2011-2-25 22:30     标题: 回复 6楼 的帖子

除去空行的问题,可以再用一个包含感叹号的文件试试*_*
作者: weichenxiehou    时间: 2011-3-2 22:14

这样应该可以兼容空行和感叹号?
  1. @echo off
  2. :start
  3. cls&set "var=a"&set /p var=请输入(1:false,2:true):
  4. for %%a in (false true) do if "%var%" equ "%%a" set flag=a
  5. if not defined flag goto start
  6. (for /f "delims=" %%a in ('findstr /n .* test.txt') do (
  7.        set "str=%%a"&setlocal enabledelayedexpansion&set "strs=!str:*:=!"
  8.        if "!strs:~,10!" equ "autoupdate" (
  9.            echo autoupdate=%var%
  10.            ) else (
  11.            echo,!strs!
  12.        )
  13.        endlocal
  14. ))>new.txt
  15. move /y new.txt test.txt
复制代码





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