[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 批处理怎样接收管道输出逐步执行命令?

使用 for /f 执行其他命令,如 com1,
do 后面的方法,会等待 com1 退出后才会逐行执行,
这导致一些执行结果比较多,时间比较长,甚至不会停止的命令,无法即时处理前面程序的结果。

比如 ping……
寻求解决办法。
不过好多坑。感觉还是用 vbs 处理靠谱。
  1.     if "%1" neq "" call :t %* & exit /b 0
  2.     ping -w 10 www.baidu.com 2>&1 | (
  3.         for /l %%a in (0,1,10) do @(
  4.             set /p _arg=
  5.             REM 下一行不可省略
  6.             set _ >nul
  7.             for /f "usebackq tokens=1* delims==" %%b in (`set _`) do @call %0 %%c
  8.         )
  9.     )
  10.     exit /b 0
  11. :t
  12.     echo --%*--
  13.     goto :eof
复制代码
其中,让人费解的是 set _ >nul 这行不能省略,感觉上执行毫无意义,但是省略了,下一行 for 内的 set _ 就没有输出了。
其次,用 set /p 接受管道输入,会经常性遇到,一行变成多行,丢行等坑爹的事情。
还有就是,在没办法确定行数的情况下,也不知道什么时候结束,超过的行数会和前面一样。尝试在变量使用过后赋值为空,整体会进入死循环。
还是折腾 vbs ,或者让 vbs 调用 batch 中的方法进行单个执行。

补充:如果去掉 第一个 for 外面的括号,获得输入拆分的更细致了……

有没有其他方式,可以对连续输出,即时进行逐行处理的方案(仅限 batch,出一行执行一行)

没看懂在说啥
对于输出,这几种是不一样的,可以注意一下
dir
ping
ping -t
systeminfo
comp

TOP

返回列表