使用 for /f 执行其他命令,如 com1,
do 后面的方法,会等待 com1 退出后才会逐行执行,
这导致一些执行结果比较多,时间比较长,甚至不会停止的命令,无法即时处理前面程序的结果。
比如 ping……
寻求解决办法。
不过好多坑。感觉还是用 vbs 处理靠谱。- if "%1" neq "" call :t %* & exit /b 0
- ping -w 10 www.baidu.com 2>&1 | (
- for /l %%a in (0,1,10) do @(
- set /p _arg=
- REM 下一行不可省略
- set _ >nul
- for /f "usebackq tokens=1* delims==" %%b in (`set _`) do @call %0 %%c
- )
- )
- exit /b 0
-
- :t
- echo --%*--
- goto :eof
复制代码 其中,让人费解的是 set _ >nul 这行不能省略,感觉上执行毫无意义,但是省略了,下一行 for 内的 set _ 就没有输出了。
其次,用 set /p 接受管道输入,会经常性遇到,一行变成多行,丢行等坑爹的事情。
还有就是,在没办法确定行数的情况下,也不知道什么时候结束,超过的行数会和前面一样。尝试在变量使用过后赋值为空,整体会进入死循环。
还是折腾 vbs ,或者让 vbs 调用 batch 中的方法进行单个执行。
补充:如果去掉 第一个 for 外面的括号,获得输入拆分的更细致了……
有没有其他方式,可以对连续输出,即时进行逐行处理的方案(仅限 batch,出一行执行一行) |