4

我在 Windows 上使用 grep 来过滤文件,并希望将输出通过管道传输到另一个批处理脚本。

例如

grep "foo" bar.txt | mybatch.bat

在 mybatch 我想处理每个匹配的行

例如 mybatch.bat:

echo Line with foo: %1

在linux上我可以通过

grep "foo" bar.txt | while read x; do mybatch.sh $x; done

但不知道如何在 Windows 机器上做到这一点。

提前致谢!

4

2 回答 2

6

您可以使用for

for /f %x in ('grep "foo" bar.txt') do call mybatch.cmd "%x"

这将为每个非空行调用一次批处理文件,就像您的 shell 脚本示例一样。

于 2013-03-05T14:10:06.070 回答
0

这是交易的诀窍:

头.bat

@echo off

setlocal ENABLEDELAYEDEXPANSION
set n=%1

for /F "tokens=*" %%x in ('more') do (
echo %%x
set /A n -= 1
if !n! EQU 0 exit /b
)

使用它:

REM print the first 10 lines:
type test.txt | head 10 
于 2016-01-01T19:09:14.377 回答