我有一个可执行文件,比如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
。