找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24991|回复: 10

[文本处理] 批处理下使用findstr返回多行内容,如何只获取第一行?

[复制链接]
发表于 2023-11-10 18:20:38 | 显示全部楼层 |阅读模式
如题,使用bat执行命令,返回结果用findstr处理,但是处理后有多条匹配结果,如何获取第一行内容。
例如,执行findstr /c “hello world”,返回有三行,
“hello world 1”
“hello world2”
“hello world 3”
现在只想获取第一行,如何处理
发表于 2023-11-10 22:00:21 | 显示全部楼层
回复 1# learninger


1.bat
  1. @echo off
  2. for /f "delims=" %%i in ('findstr /c:"hello world" "1.txt"') do (
  3.     echo,%%i
  4.     goto :Next
  5. )
  6. :Next
  7. pause
复制代码
发表于 2023-11-10 23:04:26 | 显示全部楼层
@echo off
for /f "delims=" %%i in ('findstr /c "hello world" "aaa.txt"') do (
if not defined aaa set aaa=%%i
)
echo,"%aaa%"
pause
 楼主| 发表于 2023-11-14 19:29:02 | 显示全部楼层
回复 2# Batcher


   

是这样的,我的代码是读取一个.txt的内容,把这个内容作为参数带入到一个命令里面,已经用了一次for循环,执行命令后会获取到一个很长的输出,然后我用findstr /c去获取含有关键参数的数据,但是返回了多行,以下是我的脚本,不太确定这个要怎么写

@echo off
title=test
for /f %%i in(testin.txt) do (
echo %%i>>result.txt
..\ipmitool.exe xxx(参数)| findstr /c:“Product Serial”>tmp.txt
set /p var=<tmp.txt && >>result.txt echo,%var%
echo.>>result.txt
)
pause

在.exe执行完后我会用findstr查找包含关键字product serial的行,但我只需要第一行,所以把他放在一个tmp文件中,取第一行出来追加到result里面,但是set /p var=<tmp.txt && >>result.txt echo,%var%这行命令拉出来单独执行是可行的,放到循环里不知道什么地方出问题了,它给result追加的是一个空行,请教一下这个要怎么改
发表于 2023-11-14 21:40:20 | 显示全部楼层
回复 4# learninger
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%i in (testin.txt) do (
  4.     >>result.txt echo,%%i
  5.     ..\ipmitool.exe xxx(参数)| findstr /c:"Product Serial" >tmp.txt
  6.     set /p var=<tmp.txt
  7.     >>result.txt echo,!var!
  8.     >>result.txt echo,
  9. )
  10. pause
复制代码
 楼主| 发表于 2023-11-15 18:44:53 | 显示全部楼层
回复 5# Batcher


   学到了,加了变量延迟之后确实能读到内容了,但是问题又回到了取单行文本内容上,tmp文件里的三行内容全部被赋值给了var,最后写入result的是findstr筛选后的所有内容&#128514;
发表于 2023-11-15 18:58:17 | 显示全部楼层
回复 6# learninger


请把这行命令生成的tmp.txt文件打包上传到网盘,我看看。
  1. ..\ipmitool.exe xxx(参数)| findstr /c:"Product Serial" >tmp.txt
复制代码
发表于 2023-11-15 20:12:19 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('type 1.txt^|findstr /c:"Product Serial"') do (
  4.     set /a num+=1
  5.     set var!num!=%%i
  6. )
  7. echo %var1%
  8. pause
复制代码
发表于 2023-11-15 22:11:05 | 显示全部楼层
需要enabledelayedexpansion
需要清除set /p的内容,不然再次set /p时为空,就是上次的内容

  1. @echo off
  2. for /f %%i in (testin.txt) do (
  3. set "aaa=%%i"
  4. ..\ipmitool.exe xxx(参数)| findstr /c:"Product Serial" >tmp.txt
  5. setlocal enabledelayedexpansion
  6. echo,!aaa!>>result.txt
  7. set /p var=<tmp.txt
  8. echo,!var!>>result.txt
  9. echo,>>result.txt
  10. endlocal
  11. )
  12. pause
复制代码
发表于 2023-11-15 22:33:31 | 显示全部楼层
这样呢
  1. ..\ipmitool.exe xxx(参数)| findstr /c:"Product Serial" |cmd /v /c set /p s=^&echo !s!>>result.txt
复制代码
发表于 2023-11-15 23:26:51 | 显示全部楼层
回复 4# learninger


  1. @echo off &setlocal enabledelayedexpansion
  2. (for /f "delims=" %%i in (testin.txt) do (
  3.         echo,%%i
  4.         set "r1="
  5.         for /f "delims=" %%s in ('..\ipmitool.exe xxx ^| findstr /c:"Product Serial" ') do if not defined r1 (set "r1=%%s")
  6.         echo,!r1!
  7. ))>result.txt
  8. endlocal &exit/b
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 10:22 , Processed in 0.020966 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表