比较文件大小并移动到文件夹

时间:2018-03-02 18:24:02

标签: powershell compare

在下面的脚本中我搜索相同大小的文件并将它们移动到" C:\ files_compared",问题是我想让一个比较文件的文件它在哪里(" C:\ folder1")并且只将其他人移动到" C:\ files_compared"。

保留在原始文件夹中的文件的名称并不重要,可以是任何比较的文件,只要它是大小比较标准中的一个。

$allfiles = Get-ChildItem -file "C:\folder1"  | Group-Object -Property length
foreach($filegroup in $allfiles)
{
    if ($filegroup.Count -ne 1)
    {
        foreach ($file in $filegroup.Group)
        {
            move $file.fullname "C:\files_compared"
        }
    }
}

感谢。

2 个答案:

答案 0 :(得分:2)

(嵌套)管道解决方案:

Get-ChildItem -file "C:\folder1" | Group-Object -Property length | ForEach-Object {
  $_.Group | Select-Object -Skip 1 | Move-Item -Destination "C:\files_compared"
}
  • $_.Group是构成给定组的所有文件的集合(相同大小的文件)。

  • Select-Object -Skip 1跳过集合中的第一个文件(即将其保留在原位)并将所有其他文件(如果有)移动到目标文件夹。

    • 这种方法不需要区分单文件组和其他文件组(代码中的$filegroup.Count -ne 1条件),因为对于单文件组,内部管道只是一个无操作(跳过第一个) object不会将任何对象传递给Move-Item)。

答案 1 :(得分:1)

未经测试但请尝试:

print(True)
return