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

[其他] [讨论]批处理重定向符号的任意位置效果相同

本帖最后由 applba 于 2011-5-19 23:44 编辑

任意位置效果相同。
>>1.txt echo  abc def
echo>>1.txt  abc def
echo  abc>>1.txt def
echo  abc def>>1.txt


测试代码
  1. @echo off &echo.>1.txt
  2. >>1.txt echo  abc def
  3. echo>>1.txt  abc def
  4. echo  abc>>1.txt def
  5. echo  abc def>>1.txt
  6. start 1.txt
  7. pause
复制代码
1

评分人数

把echo off去掉,一切了然。
结果我发现它真的移了……
applba 发表于 2011-5-20 20:54

看来我白举例了...

TOP

把echo off去掉,一切了然。
结果我发现它真的移了……

TOP

把echo off去掉,一切了然。

首先当然无条件处理%,然后处理^,然后是qzw说的那些。
预处理结束后,那些功能符号当然“消失”了(对CMD来说)。因为已经创建了句柄,为管道两边的命令准备了创建进程所需参数,对语句块(包括&、&&、||等)确定了程序流程和逻辑,等等。比如,假设转换成C语言,
cmd1&cmd2&cmd3 → cmd1();cmd2();cmd3();
cmd1&&cmd2||cmd3  → cmd1() ? cmd2() : cmd3()

TOP

看来我是搞不透这些个机制了,还是不搞了吧……

TOP

14# applba


请看5楼例子,不要关回显。
微软不开源,所以bat中很多似是而非的东西只好用不断推翻错误猜想的方式去探究,烦啊...

TOP

忘了提到一点
cmd对 & | > >> < & && ||的两步处理是不连续的
中间夹杂着其它的一些命令行处理代码
第一步的所有整理操作
都是为了使命令行更加清晰和标准
让第二步的处理过程能够更加简便
天的白色影子

TOP

13# qzwqzw


为什么会要移动呢,不是很理解。
我觉得这个重定向符号就像是一个信使,和人接头 了,就可以走了。

TOP

可以确定的是
cmd对 & | > >> < & && ||的处理是大体上分为两步的
第一步是对这些符号进行整理
包括对> <添加默认句柄号
对以上符号前后预留空格
对< >以及句柄对应的文件移到语句尾部

第二步是对这些符号进行处理
创建打开文件
复制文件句柄等
处理完这些符号后
整体语句的分析就已已经结束
这里不存在刻意的符号丢弃或者消失
天的白色影子

TOP

本帖最后由 applba 于 2011-5-20 03:55 编辑

7# zm900612


首先,要识别出来它是特殊符号。
然后,解释其功能,即通常所说的(预)处理。

解释完了,特殊符号的使命就完成了,可以“消失”了

TOP

嗯,反正谁对我听谁的...

TOP

说法这么混乱
只因为大家对预处理的概念理解不一
预处理是个相对笼统的概念
在批处理开启echo on后
回显的命令行已经是预处理的结果
至于这以后对命令行的分析算不算预处理
没有标准的界限定义
而且不同命令的预处理过程也是不同的
天的白色影子

TOP

8# powerbat


唔,貌似这个说法更标准

TOP

任何功能符号在预处理后都“消失”了,它们只是用来告诉CMD按什么逻辑和规则执行语句。

一句话,“预处理时判定语句的结构和功能”。

TOP

怎么去区别“被处理后消失”和“被区分后失效”呢?

TOP

返回列表