Board logo

标题: [文件操作] 批处理重定向和管道的组合为何出错? [打印本页]

作者: wacs5    时间: 2012-11-8 17:36     标题: 批处理重定向和管道的组合为何出错?

我原本想,输出
1 1
> 3 3.5
2 1
用管道重定向给一个程序。我用
  1. ( echo 1 1
  2. echo ^>3 3.5
  3. echo 2 1
  4. ) | 程序
复制代码
看到额外生成了一个3这个文件,里面的内容是3.5。而程序那里只得到第一行和第三行的内容(1 1 和2 1)

而下面的代码,则又可以把中间那和3 3.5输入文件
  1. ( echo 1 1
  2. echo ^>3 3
  3. echo 2 1
  4. ) >> data.txt
复制代码
这是怎么回事?
作者: Demon    时间: 2012-11-8 17:58

批处理技术内幕:重定向与管道

管道两边都会新建一个新进程,如果是内部命令则以cmd.exe /S /D /c" command"的形式创建新的CMD进程。
  1. echo ^>3 hello | findstr .
复制代码
左边进过预处理后为echo >3 hello,所以新的进程为cmd.exe /S /D /c" echo >3 hello",把标准输出重定向到文件3了,findstr自然得不到内容。

改为
  1. ( echo 1 1
  2. echo ^^^>3 3.5
  3. echo 2 1
  4. ) | findstr .
复制代码

作者: wacs5    时间: 2012-11-14 15:51

回复 2# Demon


    非常牛B的回复.
明白了.




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2