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



在下面的脚本中,我正在搜索相同大小的文件并将它们移动到"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"
        }
    }
}

谢谢。

A(嵌套(管道解决方案:

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跳过集合中的第一个文件(即将其保留在原位(,并将所有其他文件(如果有(移动到目标文件夹。

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

未经测试,但请尝试以下操作:

$allfiles = Get-ChildItem -file "C:folder1"  | Group-Object -Property length
foreach($filegroup in $allfiles)
{
    if ($filegroup.Count -ne 1)
    {
        $fileGroup.Group[1..($fileGroup.Count-1)] | move -Destination 'C:Files_compared'
    }
}

相关内容

  • 没有找到相关文章

最新更新