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

[文本处理] [已解决]批处理如何判断字符串是否存在?

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

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

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  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
复制代码
1

评分人数

TOP

回复 2# terse
非常感谢!正是我想要的!

请问ibc:abc    有什么作用。
另,如果另存,且新文件名为:原文件名&当前日期(如a20141006.txt),该如何改,谢谢!!!

TOP

回复 3# syqh2010


    等同于 /i /b /c:abc
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

谢谢两位老大,请问如何输出到文本,且新文件名=原文件名+当前日期(如a20141006.txt)?
我是小白,勿怪!

TOP

本帖最后由 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
复制代码
1

评分人数

TOP

回复 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
复制代码

TOP

回复 7# syqh2010


    已修改

TOP

回复 6# CrLf
谢谢,已生效!
只是
for /f "delims=" %%i in ("%原文件名%") do (
改成
for /f "delims=" %%i in (a.txt) do (
就能生效
否则输出内容是 a.txt

非常感谢各位的帮助!

TOP

回复 9# syqh2010


    哦,是的,笔误了

TOP

返回列表