标题: [文件操作] 批处理重定向和管道的组合为何出错? [打印本页]
作者: wacs5 时间: 2012-11-8 17:36 标题: 批处理重定向和管道的组合为何出错?
我原本想,输出
1 1
> 3 3.5
2 1
用管道重定向给一个程序。我用- ( echo 1 1
- echo ^>3 3.5
- echo 2 1
- ) | 程序
复制代码
看到额外生成了一个3这个文件,里面的内容是3.5。而程序那里只得到第一行和第三行的内容(1 1 和2 1)
而下面的代码,则又可以把中间那和3 3.5输入文件- ( echo 1 1
- echo ^>3 3
- echo 2 1
- ) >> data.txt
复制代码
这是怎么回事?
作者: Demon 时间: 2012-11-8 17:58
批处理技术内幕:重定向与管道
管道两边都会新建一个新进程,如果是内部命令则以cmd.exe /S /D /c" command"的形式创建新的CMD进程。- echo ^>3 hello | findstr .
复制代码
左边进过预处理后为echo >3 hello,所以新的进程为cmd.exe /S /D /c" echo >3 hello",把标准输出重定向到文件3了,findstr自然得不到内容。
改为- ( echo 1 1
- echo ^^^>3 3.5
- echo 2 1
- ) | findstr .
复制代码
作者: wacs5 时间: 2012-11-14 15:51
回复 2# Demon
非常牛B的回复.
明白了.
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |