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

[文件操作] 批处理重定向和管道的组合为何出错?

我原本想,输出
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
复制代码
这是怎么回事?

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

管道两边都会新建一个新进程,如果是内部命令则以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 .
复制代码

TOP

回复 2# Demon


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

TOP

返回列表