在Windowsbatch file中,如何分割围绕关键字的标准input并将一半传递给另一个程序?

我有一个可执行文件,比如process.exe,它从stdin读取并输出一个处理后的版本到stdout。 我想创build一个batch file包装,我可以调用它的位置,以便只有一部分stdin被处理。 具体而言,检测到某个关键字之后的部分。

例如,让我们说process.exe的工作原理是输出与它相同的行,只是在最后添加了一个星号。 (这当然要复杂得多,但只是一个例子。)所以如果我用下面的input运行它:

apple banana cantaloupe date 

我明白了

 apple* banana* cantaloupe* date* 

我想要做的是创build一个batch file,以便只处理包含我的特殊关键字的行后面的行。 所以,如果关键字是“关键字”,我的input是:

 apple banana keyword cantaloupe date 

我想要

 apple banana keyword cantaloupe* date* 

请注意,关键字之前的行仍输出到stdout,它们只是不传递给process.exe。 我怎样才能做到这一点? 理想情况下,我想避免写入磁盘,因为我将提供的input可能非常大。 现在,我发现我可以使用for /F "tokens=*" %%a in ('findstr /n $') do (为了循环通过标准input行,但似乎findstr消耗整个input,所以我无法将其传递给process.exe …

如果Windowsbatch file是不可能的,Powershell怎么样?

 @echo off setlocal set "process=" ( for /f "delims=" %%a in (filename) do ( if "%%a"=="keyword" set "process=Y" if defined process (process %%a) else (echo %%a) ) )>outputfilename goto :eof 

当然,如果需要不区分大小写,可以将/i添加到关键字检测中,您可以将keyword更改为%~1以便在命令行中输入关键字。 如果您不想发送keyword进行process切换if的顺序

不要调用批处理文件process.bat