标题: [文本处理] 批处理怎样替换指定字符串? [打印本页]
作者: 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
- @echo off
- :start
- cls&set "var=a"&set /p var=请输入(1:false,2:true):
- for %%a in (false true) do if "%var%" equ "%%a" set flag=a
- if not defined flag goto start
- (for /f "delims=" %%a in (test.txt) do (
- for /f "delims==" %%b in ("%%a") do (
- if "%%b" equ "autoupdate" (
- echo autoupdate=%var%
- ) else (
- echo %%a
- )
- )
- ))>new.txt
- 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
保留空行:- @echo off&setlocal enabledelayedexpansion
- :start
- cls&set "var=a"&set /p var=请输入(1:false,2:true):
- for %%a in (false true) do if "%var%" equ "%%a" set flag=a
- if not defined flag goto start
- (for /f "delims=" %%a in ('findstr /n .* test.txt') do (
- set "str=%%a"&set "strs=!str:*:=!"
- if "!strs:~,10!" equ "autoupdate" (
- echo autoupdate=%var%
- ) else (
- echo,!strs!
- )
- ))>new.txt
- 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
这样应该可以兼容空行和感叹号?- @echo off
- :start
- cls&set "var=a"&set /p var=请输入(1:false,2:true):
- for %%a in (false true) do if "%var%" equ "%%a" set flag=a
- if not defined flag goto start
- (for /f "delims=" %%a in ('findstr /n .* test.txt') do (
- set "str=%%a"&setlocal enabledelayedexpansion&set "strs=!str:*:=!"
- if "!strs:~,10!" equ "autoupdate" (
- echo autoupdate=%var%
- ) else (
- echo,!strs!
- )
- endlocal
- ))>new.txt
- move /y new.txt test.txt
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |