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

[其他] 批处理if语句对管道命令有怎样的影响?

  1. if "a"=="b" echo 1>nul | echo err
复制代码

个人觉得应该打印err,而实际却什么不打印,高手解释下!
__@__@__批了___来看看吧

有些命令不接受从管道传递的句柄0,不过没找到有什么具体规律

TOP

群里有人给出的解释是:在if语句判断为假的时候,不会再去执行同一行后面的任何语句了。
觉得能解释上面代码所表现的现象,大家分析下!
__@__@__批了___来看看吧

TOP

个人理解,不一定对

群里的那句:
  1. if not "%s%"=="w" echo 1>nul|echo err
复制代码
如果,%s% 是w 就执行下一句,因为这一句是 if not
如果不是,  if not 成立, 执行 ehco 1>nul 并传递给 echo err。   | 前后的命令是同步执行的,当有不同步时(如|前面是dir 之类的),先等待前面执行完才传递给后面。所以 echo 1>nul|echo err 就相当于 echo err

比如:
  1. if not "%s%"=="w" echo 1|echo err
复制代码
同样,如果是w  还是不执行。
如果不是,执行 echo 1|echo err。 | 可以理解为把前一句的结果作为后一句的参数,虽然标准说法是“把前一句的输出作为后一句的输入”。例如 del 需要确认时,format ,cacls 等。所以 1 被传递 给 echo err。  那么 echo err 接受到了 1,实际应该还是 echo err。


你提到的:
  1. if "a"=="b" echo 1>nul | echo err
复制代码
首先 if 不成立,那么后面的就无法执行了

PS:对于 && || 判定应该是 errorlevel 而非句柄

[ 本帖最后由 bluewing009 于 2011-2-18 10:43 编辑 ]
1

评分人数

TOP

返回列表