[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
37# applba
  1. set "a=10f611|findstr f6"
  2. echo %a% & echo string
  3. pause
  4. echo test1234 > test.txt
  5. find "test" < test.txt | find "1234"
  6. find "test" | find "1234" < test.txt
复制代码
这个例子也许不太好
我只是想说
& | < 谁先解释取决于谁在命令行之前
以及相应的功能逻辑

这与%不同
即使在命令行末尾
也会被先行扩展
天的白色影子

TOP

本帖最后由 applba 于 2011-5-20 01:28 编辑

46# qzwqzw

|  > >> < & && ||
这几个特殊符号肯定是在执行时进行功能解读的,前四个都涉及到句柄,后三个都必须等待前面的命令执行完毕。

你的说法也合理:即这几个符号那个在前面就先处理哪个,前面的先处理,后面的后处理。这样的话就存在一个作用范围的问题: 管道符号(|) 不能超越 输入输出重定向符号(< > >>) 不能超越 命令分隔符(&,&&,||) 不能超越括号。

TOP

本帖最后由 qzwqzw 于 2011-5-20 08:25 编辑

所谓的“不能超越”不能理解
不需要把概念搞的这样理论化
天的白色影子

TOP

46# qzwqzw

|  > >> < & && ||
这几个特殊符号肯定是在执行时进行功能解读的,前四个都涉及到句柄,后三个都必须等待前面的命令执行完毕。

你的说法也合理:即这几个符号那个在前面就先处理哪个,前面的先处 ...
applba 发表于 2011-5-20 00:48


|是兼具句柄重定向和语句连接符功能的,而且具有连接符所有特征,所以不能将它和重定向符号并列起来。我举个例子
  1. (dir >1.txt >con)>2.txt
  2. ::重定向符号是并列的,但是每一次重定向都会刷新对应句柄的设置,所以对同样的句柄,只有最后一次重定向是有效的。
  3. set|findstr /i "pro"|sort +2
  4. ::而管道则不光将两个命令的0、1句柄桥接起来,还充当了语句之间的连接符,连接符的特征是按从左到右的顺序进行判断,举个例子:
  5. 2>nul ren %~s0 &&(echo 1,此处不显示)||(echo 2,此处显示)&&(echo 3,此处显示)||(echo 4,此处不显示)
  6. ::可见语句的优先级顺序就是连接符的优先级顺序,连接符是并列的,而且优先级高于重定向符。
  7. pause
复制代码

TOP

48# qzwqzw


不能超越,我的意思就是前者会受到后者的限制。
echo 123&echo 456 >nul
上面例子中,>的作用范围受到了&的限制,>只能对echo 456重定向,不会对echo 123重定向。

TOP

50# applba


那就用重定向的优先级低于管道来解释不是豁然贯通了吗?为什么要把他们强凑在一个优先级上,再打上一堆补丁去弥补这个看法的漏洞呢?

TOP

51# zm900612


唉……我也不想这样啊……看来我以后还是老实写点批处理代码……这些东西想了也是白想,还不实用

TOP

52# applba


话也不能这么说呀,这几天的争论中,我虽然一再否定自己原先的观点,但是并非意味着失败,而是由此越来越趋近于预处理机制的核心真相...这种争论,虽然有很多东西无从论证,但是总归是有助于相互印证的,毕竟要想一个人去揣测出所有方面的机制是很难的。很喜欢这样相互切磋,技术论坛,就应该有这种气氛

TOP

为什么不回过头来想想39楼提到的优先级呢?

TOP

为什么不回过头来想想39楼提到的优先级呢?
powerbat 发表于 2011-5-20 20:52

我认为连接符(包括管道)是平级的,而非“| > & > && > ||”

TOP

返回列表