Board logo

标题: [文本处理] [已解决]用批处理查找完全匹配的行 [打印本页]

作者: ANSL    时间: 2022-4-8 14:48     标题: [已解决]用批处理查找完全匹配的行

本帖最后由 ANSL 于 2022-4-10 08:38 编辑

1.txt内容
one
two
three

用户输入一个词
要和1.txt的的一个行完全匹配
如果没找到
显示2
如果找到了
显示那行的行数
如 23
作者: qixiaobin0715    时间: 2022-4-8 15:10

本帖最后由 qixiaobin0715 于 2022-4-8 15:23 编辑

保存为ANSI编码
  1. @echo off
  2. set /p var=请输入单词:
  3. findstr /n /be /lc:"%var%" a.txt
  4. if errorlevel 1 echo,不存在单词%var%。
  5. pause
复制代码

作者: ANSL    时间: 2022-4-8 19:32

本帖最后由 ANSL 于 2022-4-8 19:33 编辑

回复 2# qixiaobin0715只显示他的行数并且得完全匹配
行数显示示例: 23
行数不带:

作者: Batcher    时间: 2022-4-8 21:03

回复 1# ANSL


    这个需要好奇怪,比如代码输出2,那么到底是没找到呢?还是找到了而且恰好是第二行呢?
作者: qixiaobin0715    时间: 2022-4-9 09:36

回复 3# ANSL
我觉得这样显示很好啊,在一行中既显示行数又能看到你到底输入的是什么单词。
不知你非要单独显示行数有什么意图?上面的显示格式最终对你有什么影响吗?
如果确实需要单独显示行数,可自行修改,提示:
核心代码是2楼第3行代码,可将其放在
  1. for /f "delims=:" %%a in ('findstr ...') do ...
复制代码
中进行切分。
作者: ANSL    时间: 2022-4-9 11:07

回复 5# qixiaobin0715
那完整代码是什么?

作者: Batcher    时间: 2022-4-9 17:04

回复 1# ANSL
  1. @echo off
  2. cd /d "%~dp0"
  3. set "return=NotFound"
  4. set "input=Nothing"
  5. set /p "input=Which keyword:"
  6. for /f "delims=:" %%i in ('type "1.txt" ^| findstr /n /l /x /c:"%input%"') do (
  7.     set "return=%%i"
  8. )
  9. echo,%return%
  10. pause
复制代码

作者: qixiaobin0715    时间: 2022-4-10 08:38

还是Batcher的思路简洁。
按照我在5楼的想法,代码是这样的:
  1. @echo off
  2. set /p var=请输入单词:
  3. for /f "delims=:" %%a in ('findstr /n /be /lc:"%var%" a.txt') do (
  4.     echo,%%a
  5.     set str=%%a
  6. )
  7. if not defined str echo,不存在单词%var%。
  8. pause
复制代码
两个代码对比就能看出,我的代码就稍显啰嗦。




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