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

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

如题,使用bat执行命令,返回结果用findstr处理,但是处理后有多条匹配结果,如何获取第一行内容。
例如,执行findstr /c “hello world”,返回有三行,
“hello world 1”
“hello world2”
“hello world 3”
现在只想获取第一行,如何处理

回复 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
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

@echo off
for /f "delims=" %%i in ('findstr /c "hello world" "aaa.txt"') do (
if not defined aaa set aaa=%%i
)
echo,"%aaa%"
pause

TOP

回复 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追加的是一个空行,请教一下这个要怎么改

TOP

回复 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
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5# Batcher


   学到了,加了变量延迟之后确实能读到内容了,但是问题又回到了取单行文本内容上,tmp文件里的三行内容全部被赋值给了var,最后写入result的是findstr筛选后的所有内容&#128514;

TOP

回复 6# learninger


请把这行命令生成的tmp.txt文件打包上传到网盘,我看看。
  1. ..\ipmitool.exe xxx(参数)| findstr /c:"Product Serial" >tmp.txt
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

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

TOP

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

TOP

这样呢
  1. ..\ipmitool.exe xxx(参数)| findstr /c:"Product Serial" |cmd /v /c set /p s=^&echo !s!>>result.txt
复制代码

TOP

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

TOP

返回列表