今天晚上我没有数羊,而是创建了一个 cmdlet,列出了目录中的所有重复文件。这很简单,它只能处理目录中的所有文件,而且我不热衷于重新发明轮子来添加过滤,所以这就是我想要用它做的事情:
dir | duplicates | del
唯一的问题是,通常管道中的任何给定命令一次只能处理一个对象,这对于检测重复项没有任何好处。(当然,一组中没有重复项,对吧?)
有没有什么技巧可以让链中的第二个命令在完成其工作并将内容传递给第三个命令之前收集第一个命令的所有输出?
今天晚上我没有数羊,而是创建了一个 cmdlet,列出了目录中的所有重复文件。这很简单,它只能处理目录中的所有文件,而且我不热衷于重新发明轮子来添加过滤,所以这就是我想要用它做的事情:
dir | duplicates | del
唯一的问题是,通常管道中的任何给定命令一次只能处理一个对象,这对于检测重复项没有任何好处。(当然,一组中没有重复项,对吧?)
有没有什么技巧可以让链中的第二个命令在完成其工作并将内容传递给第三个命令之前收集第一个命令的所有输出?
您可以一次处理一个文件,只需将收到的每个文件存储在Process
块中,然后在一个End
块中处理所有文件。这就是 Group & Sort 等命令的工作方式。在获得所有输入之前,他们无法分组或排序。一旦他们获得所有输入,他们就会执行操作,然后开始以分组/排序的顺序再次将结果流式传输到管道中。
所以我实际上是在洗澡的时候想出了答案,回来发现基思已经提供了答案。无论如何,这是一个例子。
begin
{
Add-Type -Path ($env:USERPROFILE + '\bin\CollectionHelper.cs');
[string[]] $files = @()
}
process
{
$files += $FullName
}
end
{
[JMA.CollectionHelper]::Duplicates($files)
}