Board logo

标题: [文本处理] [已解决]批处理如何判断字符串是否存在? [打印本页]

作者: syqh2010    时间: 2014-10-6 18:21     标题: [已解决]批处理如何判断字符串是否存在?

本帖最后由 syqh2010 于 2015-3-4 00:25 编辑

新手求助,请各位高手看看,给个纯批,感激不尽!
文本部分内容如下:
  1. XYZ11111111
  2. THA111111111
  3. ABC1111111112
  4. ANK47514
复制代码
要求:
1)判断以"ABC"开头的行是否存在
2)若存在,将原内容替换成"ABC888"
3)若不存在,在以"XYZ"开头的下一行写入"ABC888"
作者: terse    时间: 2014-10-6 19:23

  1. @echo off
  2. findstr /ibc:abc a.txt>nul&&set str=abc&&set a=0||set str=xyz&&set "a="
  3. for /f "delims=" %%i in (a.txt) do (
  4.     set str=%%i
  5.     setlocal enabledelayedexpansion
  6.     if /i "!str:~,3!" == "%str%" (
  7.        if not defined a echo,!str!
  8.        set "str=ABC888"
  9.     )
  10.     echo !str!
  11.     endlocal
  12. )
  13. 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 楼代码:
  1. @echo off
  2. set "原文件名=a.txt"
  3. for /f "tokens=1-3 delims=-/\:. " %%a in ("%date%") do set "当前日期=%%a%%b%%c"
  4. for %%a in ("%原文件名%") do set "新文件名=%%~na%当前日期%%%~xa"
  5. findstr /ibc:abc a.txt>nul&&set str=abc&&set a=0||set str=xyz&&set "a="
  6. for /f "delims=" %%i in ("%原文件名%") do (
  7.     set str=%%i
  8.     setlocal enabledelayedexpansion
  9.     if /i "!str:~,3!" == "%str%" (
  10.        if not defined a echo,!str!
  11.        set "str=ABC888"
  12.     )
  13.     echo !str!
  14.     endlocal
  15. )>"%新文件名%"
  16. pause
复制代码

作者: syqh2010    时间: 2014-10-7 12:26

回复 6# CrLf
谢谢!
按你给你代码运行结果是:
文件名:a%当前日期.txt
内  容:a.txt

按你的代码改了一下,得到的内容是正确的,但文件名还是  a%当前日期.txt

系统找不到文件 2014/10/07。
请按任意键继续. . .
  1. @echo off
  2. set "原文件名=a.txt"
  3. for /f "tokens=1-3 delims=-/\:. " %%a in [color=Red](%date%[/color]) do set "当前日期=%%a%%b%%c"
  4. for %%a in ("%原文件名%") do set "新文件名=%%~na%%当前日期%%~xa"
  5. findstr /ibc:abc a.txt>nul&&set str=abc&&set a=0||set str=xyz&&set "a="
  6. for /f "delims=" %%i in ([color=Red]a.txt[/color]) do (
  7.     set str=%%i
  8.     setlocal enabledelayedexpansion
  9.     if /i "!str:~,3!" == "%str%" (
  10.        if not defined a echo,!str!
  11.        set "str=ABC888"
  12.     )
  13.     echo !str!
  14.     endlocal
  15. )[color=Red]>>[/color]"%新文件名%"
  16. 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