Windows命令处理器:输出重定向机制

时间:2013-11-10 02:53:28

标签: cmd overwrite io-redirection

使用windows'cmd.exe,运行

之类的命令
output.exe > out.txt

现有的非空文件'out.txt'实际发生了什么?

创建新的'out.txt',而旧的'out.txt'以'rm out.txt'方式删除?
我认为它并没有字面上写过旧的'out.txt',因为这似乎很危险。

P.S。 可以使用cmd.exe命令专门写入旧文件的数据吗?

即。

>type out.txt
This is a sentence.  
>strangeEchoes That > out.text
>type out.txt
That is a sentence.

P.P.S

随时欢迎提供信息,越多越好越好=)

P.P.P.S。

很抱歉,如果我不善于寻找答案/提问。

2 个答案:

答案 0 :(得分:0)

基于Process Monitor跟踪,当echo text > filename.txt运行时,调用CreateFile并将dwCreationDisposition标记设置为CREATE_ALWAYS,其中< / p>

  

始终创建新文件。

     

如果指定的文件存在且可写,则该函数将被覆盖   文件,函数成功,最后错误代码设置为   ERROR_ALREADY_EXISTS(183)。

     

如果指定的文件不存在且是有效路径,则为新文件   创建,函数成功,最后一个错误代码设置为   零。

另一方面,

echo demo2 >> filename.txt使用CreateFile调用CREATE_NEW并打开现有文件。然后,该进程获取文件的结尾,从结尾读取一个字节,然后开始写入。我猜它正在寻找一个^Z字符,它在读取最后一个字符时需要覆盖,但这只是一个猜测。

答案 1 :(得分:0)

将输出附加到现有文件:

>>out.txt output.exe