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

[文本处理] 批处理怎样替换指定字符串?

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

各位大虾给小弟指导一下吧,最好能有代码,跪谢了。。。

  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 编辑 ]
***共同提高***

TOP

感谢batman

太谢谢你啦
有个小问题 这个代码貌似不能保留空行啊 如果我想保留空行应该怎么处理啊

TOP

回复 2楼 的帖子

学习了。不过个人认为还是将%%b截取一定的位数再比较好。
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

保留空行:
  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 编辑 ]
***共同提高***

TOP

感谢batman

感谢batman大虾这么热心,不过这个好像有点问题 我运行了 发现还是没有保留空行。。。

TOP

回复 6楼 的帖子

5楼代码已修改。。。。
***共同提高***

TOP

回复 6楼 的帖子

除去空行的问题,可以再用一个包含感叹号的文件试试*_*
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

这样应该可以兼容空行和感叹号?
  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
复制代码
看得多说得多,远比不上写得多。

TOP

返回列表