m0t*_*ive 33 windows stdin stdout batch-file
是否可以在批处理文件中使用管道stdin流?
我希望能够将一个命令的输出重定向到我的批处理文件process.bat
列表中,这样:
C:\>someOtherProgram.exe | process.bat
Run Code Online (Sandbox Code Playgroud)
我的第一次尝试看起来像:
echo OFF
setlocal
:again
set /p inputLine=""
echo.%inputLine%
if not (%inputLine%)==() goto again
endlocal
:End
Run Code Online (Sandbox Code Playgroud)
当我用type testFile.txt | process.bat
它测试时,它会反复打印出第一行.
还有另外一种方法吗?
jeb*_*jeb 34
set /p
不适用于管道,它从输入中获取一条(随机)线.
但是你可以more
在for循环中使用.
@echo off
setlocal
for /F "tokens=*" %%a in ('more') do (
echo #%%a
)
Run Code Online (Sandbox Code Playgroud)
但是这会以以分号开头的行失败(因为eol的FOR-LOOP标准是;
).
它无法读取空行.
但是对于findstr,你也可以解决这个问题,它在每一行前面加上亚麻,所以你永远不会得到空行.
然后将前缀删除到第一个冒号.
@echo off
setlocal DisableDelayedExpansion
for /F "tokens=*" %%a in ('findstr /n $') do (
set "line=%%a"
setlocal EnableDelayedExpansion
set "line=!line:*:=!"
echo(!line!
endlocal
)
Run Code Online (Sandbox Code Playgroud)
或者,在某些不包含的环境(如WinRE)上findstr
,替代方案find.exe
就足够了. find
将接受空搜索字符串""
,并允许搜索反转.这将允许这样的事情:
@echo off
setlocal DisableDelayedExpansion
for /F "tokens=*" %%a in ('find /v ""') do (
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28050 次 |
最近记录: |