如何防止PowerShell中的这个无限循环?

时间:2015-06-03 02:59:10

标签: powershell command-prompt cat

在PowerShell中执行以下命令后,在命令行上引用this教程时,它会进入无限循环。

echo "I am a new file." > ex15.txt
cat ex15.txt > another.txt
cat *.txt > bigfile.txt

在触发最后一个命令后,执行永远不会结束。它进入无限循环。但是在命令提示符下使用type命令可以正常工作。

type *.txt > bigfile.txt

此命令不会进入无限循环。这非常有效。为什么这不适用于PowerShell?

3 个答案:

答案 0 :(得分:3)

Powershell中的

Cat (Get-Content)与cmd中的type命令的工作方式不同。

Type将不会看到正在写的bigfile.txt,但是Get-Content会出现并且您最终会读取bigfile.txt并写入同一个文件,因此它会陷入循环

为了防止循环,你可以通过将cat表达式包装在parens中来强制cat在写入之前读完所有文件:

(cat *.txt) > bigfile.txt

答案 1 :(得分:1)

正如@mjolinor解释的那样,Get-Content正在读取你正在添加到bigfile.txt的数据,就像写入它一样快,从而产生一个永远不会结束的命令。

最简单的解决方案是将bigfile.txt放入不同的目录中,因此它不是您正在阅读的文件之一。例如:父目录。

cat *.txt > ..\bigfile.txt

答案 2 :(得分:0)

另一种变体是从当前路径中要读取的文件中排除'bigfile.txt':

cat (ls *.txt -Exclude bigfile.txt) > bigfile.txt