复制项目缓慢 - 40分钟过滤和复制5500文件?

时间:2017-04-12 12:37:57

标签: powershell powershell-v4.0

我最近写了一个小小的脚本来帮助我从包含许多不同子文件夹和文件的更大目录中提取包含大量小文本文件的子文件夹。

总而言之,我复制了~17GB的文件夹(~100个文件夹,包含~5,500个文件),其中包含来自外部硬盘的txt文件到我的本地硬盘。连接是USB 2.0。

这需要约40分钟!为什么这需要这么长时间?

开销是否更多地与我的代码或过时数据连接的缓慢有关?我将来可以采取哪些捷径? robocopy本身是否比copy-item更快?如果是这样,为什么?

$mainDir = Get-ChildItem 'E:\Some Big Directory\' -Recurse | Where {$_.Mode -match 'd'} | % {$_.FullName}

ForEach($dir in $mainDir){
    if($dir.ToString() -match 'SubfoldersIWant'){
        Copy-Item -Path $($dir + '\TheActualFolderIWant\*') -Destination 'C:\somwhere' -Recurse
    }
}

文件夹结构有点如下(WAY down):

Some Big Directory
    -SubfoldersIWant1
    -subFolderIDontwant
        -random.txt
    -subFoldersIWant
        -*.txt
    -rando.jpg
    -I dont want this folder
    -random junk
    -SubfoldersIWant2
    -subFolderIDontwant
        -random.txt
    -subFoldersIWant
        -*.txt
    -rando.jpg
    -dontwantthiseither.jpg

1 个答案:

答案 0 :(得分:1)

您可以使用以下一行:

Get-ChildItem 'E:\Some Big Directory' -Directory -Recurse | Where {$_.FullName -match 'SubfoldersIWant'} | Copy-Item -Destination 'C:\somwhere' -Recurse

这样,过滤速度更快。但老实说,它不太可能产生很大的影响,因为你的瓶颈似乎是数据传输率。