标题: [文本处理] [已解决]批处理如何判断字符串是否存在? [打印本页]
作者: syqh2010 时间: 2014-10-6 18:21 标题: [已解决]批处理如何判断字符串是否存在?
本帖最后由 syqh2010 于 2015-3-4 00:25 编辑
新手求助,请各位高手看看,给个纯批,感激不尽!
文本部分内容如下:- XYZ11111111
- THA111111111
- ABC1111111112
- ANK47514
复制代码
要求:
1)判断以"ABC"开头的行是否存在
2)若存在,将原内容替换成"ABC888"
3)若不存在,在以"XYZ"开头的下一行写入"ABC888"
作者: terse 时间: 2014-10-6 19:23
- @echo off
- findstr /ibc:abc a.txt>nul&&set str=abc&&set a=0||set str=xyz&&set "a="
- for /f "delims=" %%i in (a.txt) do (
- set str=%%i
- setlocal enabledelayedexpansion
- if /i "!str:~,3!" == "%str%" (
- if not defined a echo,!str!
- set "str=ABC888"
- )
- echo !str!
- endlocal
- )
- pause
复制代码
作者: syqh2010 时间: 2014-10-6 19:42
回复 2# terse
非常感谢!正是我想要的!
请问ibc:abc 有什么作用。
另,如果另存,且新文件名为:原文件名&当前日期(如a20141006.txt),该如何改,谢谢!!!
作者: Batcher 时间: 2014-10-6 20:23
回复 3# syqh2010
等同于 /i /b /c:abc
作者: syqh2010 时间: 2014-10-6 21:38
谢谢两位老大,请问如何输出到文本,且新文件名=原文件名+当前日期(如a20141006.txt)?
我是小白,勿怪!
作者: CrLf 时间: 2014-10-7 05:43
本帖最后由 CrLf 于 2014-10-7 16:52 编辑
回复 5# syqh2010
修改自 2 楼代码:- @echo off
- set "原文件名=a.txt"
-
- for /f "tokens=1-3 delims=-/\:. " %%a in ("%date%") do set "当前日期=%%a%%b%%c"
- for %%a in ("%原文件名%") do set "新文件名=%%~na%当前日期%%%~xa"
-
- findstr /ibc:abc a.txt>nul&&set str=abc&&set a=0||set str=xyz&&set "a="
- for /f "delims=" %%i in ("%原文件名%") do (
- set str=%%i
- setlocal enabledelayedexpansion
- if /i "!str:~,3!" == "%str%" (
- if not defined a echo,!str!
- set "str=ABC888"
- )
- echo !str!
- endlocal
- )>"%新文件名%"
- pause
复制代码
作者: syqh2010 时间: 2014-10-7 12:26
回复 6# CrLf
谢谢!
按你给你代码运行结果是:
文件名:a%当前日期.txt
内 容:a.txt
按你的代码改了一下,得到的内容是正确的,但文件名还是 a%当前日期.txt
系统找不到文件 2014/10/07。
请按任意键继续. . .- @echo off
- set "原文件名=a.txt"
- for /f "tokens=1-3 delims=-/\:. " %%a in [color=Red](%date%[/color]) do set "当前日期=%%a%%b%%c"
- for %%a in ("%原文件名%") do set "新文件名=%%~na%%当前日期%%~xa"
- findstr /ibc:abc a.txt>nul&&set str=abc&&set a=0||set str=xyz&&set "a="
- for /f "delims=" %%i in ([color=Red]a.txt[/color]) do (
- set str=%%i
- setlocal enabledelayedexpansion
- if /i "!str:~,3!" == "%str%" (
- if not defined a echo,!str!
- set "str=ABC888"
- )
- echo !str!
- endlocal
- )[color=Red]>>[/color]"%新文件名%"
- pause
复制代码
作者: CrLf 时间: 2014-10-7 16:52
回复 7# syqh2010
已修改
作者: syqh2010 时间: 2014-10-7 17:38
回复 6# CrLf
谢谢,已生效!
只是
for /f "delims=" %%i in ("%原文件名%") do (
改成
for /f "delims=" %%i in (a.txt) do (
就能生效
否则输出内容是 a.txt
非常感谢各位的帮助!
作者: CrLf 时间: 2014-10-7 20:15
回复 9# syqh2010
哦,是的,笔误了
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |