找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 19469|回复: 1

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

[复制链接]
发表于 2017-3-15 13:43:48 | 显示全部楼层 |阅读模式
使用 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,出一行执行一行)
发表于 2017-3-16 15:57:34 | 显示全部楼层
没看懂在说啥
对于输出,这几种是不一样的,可以注意一下
dir
ping
ping -t
systeminfo
comp
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 13:22 , Processed in 0.008596 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表