展平目录结构

时间:2016-09-27 16:09:02

标签: powershell directory-structure

以下功能会使目录结构变平,并根据所选的上次写入日期复制文件。

function mega-copy($srcdir,$destdir,$startdate,$enddate)
{
    $files = Get-ChildItem $SrcDir -recurse | Where-Object { $_.LastWriteTime -ge "$startdate" -and $_.LastWriteTime -le "$enddate" -and $_.PSIsContainer -eq $false };
    $files|foreach($_)
    {
        cp $_.Fullname ($destdir+$_.name) -Verbose
    }
}

这在较小的目录上非常成功,但是当试图将它用于具有多个子目录且文件数量从几十万到几千万的目录时,它只是停滞不前。我运行它并允许它静置24小时,并没有复制任何文件,也没有在PowerShell控制台窗口中显示任何内容。在这个特定的例子中,大约有2700万个文件。

然而,一个简单的批处理文件完成了这项工作没有任何问题,尽管它很慢。

1 个答案:

答案 0 :(得分:0)

简单的答案是:使用中间变量导致文件移动启动的巨大延迟。结合使用

-and $_.PSIsContainer -eq $false

而不是简单地使用-file开关,答案是对我的脚本进行一些简单的修改,结果如下:

function mega-copy($srcdir,$destdir,$startdate,$enddate)
{
Get-ChildItem $SrcDir -recurse -File | Where-Object { $_.LastWriteTime -ge "$startdate" -and $_.LastWriteTime -le "$enddate" } | foreach($_) {
                cp $_.Fullname ($destdir+$_.name) -Verbose
}
}