powershell - 扁平化目录结构

标签 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 万个文件。

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

最佳答案

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

-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
}
}

关于powershell - 扁平化目录结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39729491/

相关文章:

powershell - 如何从 PowerShell 启动远程桌面?

class - 如何在 MATLAB 中定义一个类,该类使用在单独的文件(@ 文件夹中)中定义的方法?

c# - 如何检查目录 1 是否是 dir2 的子目录,反之亦然

powershell - 如何比较 dotnet 包和 txt

ruby-on-rails - 将 Ruby on Rails 与 AngularJS 集成的最简洁方法是什么?

php - 如果目录不存在则根据字符串创建一个目录?

asp.net-mvc - ASP.NET MVC 中的 View 文件/目录结构应该是什么?

powershell - 选择字符串模式全词

powershell - 创建一个可以减少结果的管道函数

powershell - Powershell通过文本文件循环并按冒号分割