2013-03-05 100 views
3

我在Windows上使用grep来筛选文件,并想管道输出到另一个批处理脚本。管道输出到批处理脚本

例如

grep "foo" bar.txt | mybatch.bat 

和mybatch我想处理每个匹配线

例如mybatch.bat:在Linux上

echo Line with foo: %1 

我可以通过

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

解决这个问题,但不知道我怎样才能在Windows机器上做到这一点。

在此先感谢!

回答

5

您可以使用for

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

这将调用一次批处理文件中为每个非空行,就像你的shell脚本例子会做。

+1

感谢,效果很好,我输出我管链到一个临时文件,然后做用于在临时文件环路(在另一个批处理文件发生): FOR/F“令牌= *” %%中的x(“型temp.tmp”)做电TEST.CMD“%% X” ,但它给每一行添加引号t帽子被传递到TEST.CMD 所以如果TEST.CMD没有回声线是%1 我会行是“富”(与quouts),而在临时文件中的行是没有。任何诡计摆脱引号? – user42 2013-03-05 15:00:01

+1

使用'%〜1'代替。但也没有必要求助于'type'在这种情况下,'FOR/F %% X IN(temp.tmp)做...'不相同。 – Joey 2013-03-05 15:08:51

+0

这是没有管...可以将任务执行,但它的问题却仍然没有答案? (编辑:提议重新命名该问题) – n611x007 2015-05-21 09:55:00

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