将输出管道到批处理脚本

4
我正在Windows上使用grep筛选文件,并希望将输出导入到另一个批处理脚本中。
grep "foo" bar.txt | mybatch.bat

"在我的批处理文件中,我想要处理每个匹配的行。例如,mybatch.bat文件:"
echo Line with foo: %1

在Linux上,我可以通过以下方式解决这个问题:
grep "foo" bar.txt | while read x; do mybatch.sh $x; done

“但我不知道如何在Windows机器上做到这一点。”“提前致谢!”
2个回答

6
您可以使用 for
for /f %x in ('grep "foo" bar.txt') do call mybatch.cmd "%x"

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

1
谢谢,运行良好。我将我的管道链输出到一个临时文件中,然后在另一个批处理文件中进行for循环: for /f "tokens=*" %%x in ('type temp.tmp') do call test.cmd "%%x" 但它会给传递给test.cmd的每一行添加引号。所以如果test.cmd执行echo Line is %1 我将得到Line is "foo"(带引号),而临时文件中的行没有。有什么技巧可以去掉引号吗? - user42
1
使用%~1代替。但在这种情况下不需要使用typefor /f %%x in (temp.tmp) do ...能够实现相同的功能。 - Joey
这不是一根管道...任务可能已经完成,但问题是否仍然没有得到真正的回答呢?(编辑:建议重命名问题) - n611x007

0

这是行业的技巧:

head.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 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接