Board logo

标题: [ 新手练习题 6 ]批处理检查文本中是否存在某字串 [打印本页]

作者: wxcute    时间: 2009-6-22 13:15     标题: [ 新手练习题 6 ]批处理检查文本中是否存在某字串

[ 新手练习题 6 ] 检查文本中是否存在某字串
检查下列文本文件中是否存在“批处理之家”字符串,显示出含有该字串的文件名。
其中字符串与文本文件均可自行构建。
cn.txt
  1. 欢迎来到批处理之家
  2. 欢迎来到新手练功区
复制代码
en.txt
  1. 欢迎来到BATHOME
  2. 欢迎来到新手练功区
复制代码
目的:掌握判断文本中是否含有字符串的方法,用于查找文件等实际用途。

要求:可自行创建多个文件进行查找。可利用外部命令,当然也可不用。
   若是自已构建,请将查找的字串写出来,还有示例文本。
   方法不限。

评分:代码可读性 1 分;
   首个新方法 5 分,第二个 4 分,依次类推,最少 2 分;
   一人可多种方法,新方法追加 2 分,已经出现过的方法追加 1 分。
作者: rodane_13    时间: 2009-6-22 17:46

以下是代码,没有考虑特殊字符,不知有没有考虑周全?

  1. 1.txt
  2. abndabcdnd
  3. 2.txt
  4. abndabcnd
  5. 2 3.txt
  6. abndabcsdabcdnd
复制代码

  1. @echo off
  2. for /r %%i in (*.txt) do (findstr /c:"abcd" "%%~nxi">nul&&echo %%~nxi)
  3. pause>nul
复制代码

[ 本帖最后由 rodane_13 于 2009-6-22 18:18 编辑 ]
作者: 风行者    时间: 2009-7-13 01:55

  1. @echo off
  2. for /r %%a in (*.txt) do findstr /r "\<批处理之家\>" "%%a" >nul && echo %%~nxa
  3. pause
复制代码

作者: quake_wu    时间: 2009-8-13 17:01

  1. @echo off
  2. set /p a=请输入查找的关键字:
  3. for /F "tokens=1 delims=:" %%i in ('findstr /C:%a% *.txt ') do echo  %%i
复制代码

作者: cs19860814    时间: 2009-8-24 09:07

a.txt:

批处理之家是一个很好的批处理学习平台!!!

代码:
  1. @echo off
  2. for /r %%i in (*.txt) do  findstr /c:批处理之家 "%%i">nul && echo %%~nxi
  3. pause>nul
复制代码

作者: DXSX    时间: 2009-8-25 11:38

一条命令就可以解决:
FOR /F "TOKENS=2 DELIMS= " %C IN ('FIND /C /I "批处理之家" *.TXT') DO @ECHO %~NC.TXT

不过如果文件名有空格就不好用了,可以用下一个方法

@echo off
for /f "delims=" %%c in ('dir /b /a-d *.txt') do (
find /c /i "批处理之家"  "%%c" >nul
if not errorlevel 1 echo %%c
)
pause

[ 本帖最后由 DXSX 于 2009-8-25 17:43 编辑 ]
作者: poxi    时间: 2010-7-19 22:29

答:
是这样么...
  1. @echo off
  2. call :find cn.txt
  3. call :find en.txt
  4. pause
  5. exit
  6. :find
  7. for /f " delims=:" %%i in ('findstr "批处理之家" "%1"') do echo %1
  8. goto :eof
复制代码

===========
end;
作者: imin    时间: 2010-9-12 04:29

  1. @echo off
  2. cd\
  3. c:
  4. findstr 批处理之家 1.txt
  5. rem:1.txt的内容就是cn.txt,2.txt的内容就是en.txt。
  6. if %errorlevel%==0 goto y
  7. if %errorlevel%==1 goto n
  8. :y
  9. echo 这是1.txt。
  10. pause
  11. exit
  12. :n
  13. findstr 批处理之家 2.txt
  14. if %errorlevel%==0 echo 这是2.txt。
  15. pause
  16. exit
复制代码

作者: backup    时间: 2010-9-12 15:25

  1. @echo off
  2. set /p words=input the word you want to find in files:
  3. set /p files=input the range you want to define:
  4. if "%files:~-4%"==".txt" findstr /n /c:"%words%" "%files%"&pause>nul&goto :eof
  5. for /f "delims=" %%a in ('dir  /s /b %files%\*.txt') do (
  6. findstr /n /c:"%words%" "%%a">tmps.txt && echo %%a
  7. for /f "tokens=1,2 delims=:" %%b in (tmps.txt) do echo %%c  line:%%b
  8. )
  9. del tmps.txt /q 2>nul
  10. pause>nul
复制代码

作者: meihaodehuiyi    时间: 2010-10-13 20:40

  1. @echo off
  2. find "批处理之家" <cn.txt
  3. if %errorlevel%==0 (echo 该字符串在cn.txt中) else (find "批处理之家" <en.txt)&if %errorlevel%==o (echo ^
  4. 该字符串在en.txt中)
  5. pause >nul
复制代码

[ 本帖最后由 meihaodehuiyi 于 2010-10-15 08:28 编辑 ]
作者: wangqi0077    时间: 2011-5-30 09:45

  1. @echo off
  2. findstr "批处理之家" *.txt
  3. pause
复制代码

作者: common    时间: 2011-6-8 21:39

3# 风行者

请教楼上:for /r %%a in (*.txt) do findstr /r "\<批处理之家\>" "%%a" >nul && echo %%~nxa
这句中"%%a" >nul 的做用与 echo %%~nxa 中的~nx又是什么意思
没看懂,请教下
作者: Hello123World    时间: 2011-7-19 16:49

本帖最后由 Hello123World 于 2011-7-19 16:52 编辑

1# wxcute
  1. @echo off
  2. for /r %%i in (*.txt) do findstr /m "批处理之家" "%%i"
  3. pause
复制代码

作者: CrLf    时间: 2011-7-19 18:07

13# Hello123World

可以用通配
  1. findstr /m /l /c:"批处理之家" *.txt
复制代码

作者: Hello123World    时间: 2011-7-20 02:42

使用通配符受教了,不过/l /c参数没必要吧。
作者: CrLf    时间: 2011-7-20 11:28

15# Hello123World


findstr是匹配字节的,所以面对汉字这种占两个字节的宽字符常常会出现诡异的现象,所以最好打开 /l 或者 /r 开关,而 /c: 也是保险起见而加上的,因为谁知道宽字符里是否会含有半个空格呢...




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2