Board logo

标题: [文件操作] 【已解决】求助批处理怎么读取文本指定行的内容? [打印本页]

作者: 蚯蚓传奇    时间: 2024-8-19 19:23     标题: 【已解决】求助批处理怎么读取文本指定行的内容?

本帖最后由 蚯蚓传奇 于 2024-8-21 12:04 编辑

我有个程序可以自动查找在word.log文件的哪一行包含用户输入的内容并显示对应的答案,但是我在单独读取某行内容时遇到了问题
word.log文件一共有80行,前40行是用来与输入内容匹配的,后40行是用来输出结果的
这里是我的代码
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :loop
  4. set "find=200"
  5. set /p 询问=:
  6. rem 设置初始行数
  7. set "line=0"
  8. for /f "delims=" %%a in (word.log) do (
  9.     set /a line+=1
  10.     rem 逐行查找是否有与输入内容匹配的行
  11.     echo !询问! | find /i "%%a" >nul
  12.     if !errorlevel! equ 0 (
  13.         rem 将目标行设为匹配行+40
  14.         set /a find=!line!+40
  15.         echo 在第 !line! 行找到匹配项: %%a
  16.     )
  17.     rem 查找目标行
  18. [color=Red]    if !line! == %find% (
  19.         rem 显示目标行的内容作为答语
  20.         echo %%a
  21.         pause>nul
  22.         goto :eof
  23.     )[/color]
  24. )
  25. rem 如果未找到则退出
  26. echo 未找到指定的起始行或匹配项
  27. pause>nul
  28. goto loop
复制代码
红色部分就是读取指定行的代码,但是好像不能正确的找到这一行,还请高手帮我修改一下,谢谢
作者: 蚯蚓传奇    时间: 2024-8-19 19:24

其实就是想知道如何读取目标行上的内容
作者: 蚯蚓传奇    时间: 2024-8-19 19:30

在第 19 行找到匹配项: a
C:\Users\Gao\Desktop>(
set /a line+=1
if !line! == 200 (
echo hello
pause
goto :eof
)
问题好像出在这里,获取目标行还是默认的200,应该是匹配行+40这个数才对
但是我检查了一下代码好像也没毛病呀
哪位大神能帮我看看,谢谢
作者: ShowCode    时间: 2024-8-19 21:09

回复 1# 蚯蚓传奇


第20行的%find%改成!find!
作者: 77七    时间: 2024-8-20 00:36

  1. @echo off
  2. rem 全部保存为ansi
  3. cd /d "%~dp0"
  4. set /p str=input:
  5. for /f "tokens=1* delims=[]" %%a in ('find /n "%str%" ^< "1.txt"') do (
  6. if %%a leq 40 (
  7. set /a m=%%a+40
  8. call set n=%%n%% %%m%%
  9. )
  10. )
  11. for %%a in (%n%) do (
  12. (for /l %%l in (1,1,%%a) do (
  13. rem 如果只有1个,可以删除下一行的%%a
  14. set /p #%%a=
  15. )) < "1.txt"
  16. )
  17. set #
  18. pause
复制代码

作者: 77七    时间: 2024-8-20 00:40

编辑后漏了说明...
如果行数较小,可以用楼上代码的第12-15行读取指定行内容并赋值
作者: 蚯蚓传奇    时间: 2024-8-20 08:41

回复 4# ShowCode


    好的好的,是我之前不小心写错了。现在可以运行了,感谢分享




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