标题: [文本处理] 批处理下使用findstr返回多行内容,如何只获取第一行? [打印本页]
作者: learninger 时间: 2023-11-10 18:20 标题: 批处理下使用findstr返回多行内容,如何只获取第一行?
如题,使用bat执行命令,返回结果用findstr处理,但是处理后有多条匹配结果,如何获取第一行内容。
例如,执行findstr /c “hello world”,返回有三行,
“hello world 1”
“hello world2”
“hello world 3”
现在只想获取第一行,如何处理
作者: Batcher 时间: 2023-11-10 22:00
回复 1# learninger
1.bat- @echo off
- for /f "delims=" %%i in ('findstr /c:"hello world" "1.txt"') do (
- echo,%%i
- goto :Next
- )
- :Next
- pause
复制代码
作者: Five66 时间: 2023-11-10 23:04
@echo off
for /f "delims=" %%i in ('findstr /c "hello world" "aaa.txt"') do (
if not defined aaa set aaa=%%i
)
echo,"%aaa%"
pause
作者: learninger 时间: 2023-11-14 19:29
回复 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追加的是一个空行,请教一下这个要怎么改
作者: Batcher 时间: 2023-11-14 21:40
回复 4# learninger - @echo off
- setlocal enabledelayedexpansion
- for /f %%i in (testin.txt) do (
- >>result.txt echo,%%i
- ..\ipmitool.exe xxx(参数)| findstr /c:"Product Serial" >tmp.txt
- set /p var=<tmp.txt
- >>result.txt echo,!var!
- >>result.txt echo,
- )
- pause
复制代码
作者: learninger 时间: 2023-11-15 18:44
回复 5# Batcher
学到了,加了变量延迟之后确实能读到内容了,但是问题又回到了取单行文本内容上,tmp文件里的三行内容全部被赋值给了var,最后写入result的是findstr筛选后的所有内容😂
作者: Batcher 时间: 2023-11-15 18:58
回复 6# learninger
请把这行命令生成的tmp.txt文件打包上传到网盘,我看看。- ..\ipmitool.exe xxx(参数)| findstr /c:"Product Serial" >tmp.txt
复制代码
作者: 不知道是谁 时间: 2023-11-15 20:12
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('type 1.txt^|findstr /c:"Product Serial"') do (
- set /a num+=1
- set var!num!=%%i
- )
- echo %var1%
- pause
复制代码
作者: Five66 时间: 2023-11-15 22:11
需要enabledelayedexpansion
需要清除set /p的内容,不然再次set /p时为空,就是上次的内容- @echo off
- for /f %%i in (testin.txt) do (
- set "aaa=%%i"
- ..\ipmitool.exe xxx(参数)| findstr /c:"Product Serial" >tmp.txt
- setlocal enabledelayedexpansion
- echo,!aaa!>>result.txt
- set /p var=<tmp.txt
- echo,!var!>>result.txt
- echo,>>result.txt
- endlocal
- )
- pause
复制代码
作者: terse 时间: 2023-11-15 22:33
这样呢- ..\ipmitool.exe xxx(参数)| findstr /c:"Product Serial" |cmd /v /c set /p s=^&echo !s!>>result.txt
复制代码
作者: aloha20200628 时间: 2023-11-15 23:26
回复 4# learninger
- @echo off &setlocal enabledelayedexpansion
- (for /f "delims=" %%i in (testin.txt) do (
- echo,%%i
- set "r1="
- for /f "delims=" %%s in ('..\ipmitool.exe xxx ^| findstr /c:"Product Serial" ') do if not defined r1 (set "r1=%%s")
- echo,!r1!
- ))>result.txt
- endlocal &exit/b
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |