首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Robocopy获取文件列表

使用Robocopy获取文件列表
EN

Stack Overflow用户
提问于 2015-02-06 05:01:17
回答 3查看 11.8K关注 0票数 3

我正在尝试看看使用Robocopy的解决方案是否比使用Get-ChildItem获取给定文件夹(和子文件夹...)中的文件列表更快。

在我的代码中,我使用Get-ChildItem cmdlet来获取特定文件夹中所有文件的列表,以便循环访问每个文件:

代码语言:javascript
复制
$files = Get-ChildItem "C:\aaa" -Recurse | where {! $_.PIsContainer} # ! because I don't want to list folders
foreach ($file in $files){
...
}

现在,我使用robocopy命令来获取所有文件的列表,但是,robocopy的输出是一个字符串。

代码语言:javascript
复制
[string]$result = robocopy "C:\aaa" NULL /l /s /ndl /xx /nc /ns /njh /njs /fp

那么,如何使用robocopy命令的输出对每个文件进行循环(类似于对Get-ChildItem所做的操作

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-06 19:46:12

如果您只是在寻找一种更快的方法来获取文件列表,那么传统的dir命令可以做到这一点:

代码语言:javascript
复制
$files = cmd /c dir c:\aaa /b /s /a-d
foreach ($file in $files){
...
}

编辑:一些比较性能测试-

代码语言:javascript
复制
(measure-command {gci -r |? {-not $_.psiscontainer } }).TotalMilliseconds
(measure-command {gci -r -file}).TotalMilliseconds
(measure-command {(robocopy . NULL /l /s /ndl /xx /nc /ns /njh /njs /fp) }).TotalMilliseconds
(measure-command {cmd /c dir /b /s /a-d }).TotalMilliseconds

627.5434
417.8881
299.9069
86.9364

测试目录有420个子目录中的6812个文件。

票数 5
EN

Stack Overflow用户

发布于 2015-02-06 05:04:22

代码语言:javascript
复制
$array = $files -split '\r?\n'

我假设$files是用换行符分隔的文本。这将通过换行符拆分字符串,并将其分配给$array

票数 1
EN

Stack Overflow用户

发布于 2015-02-06 08:00:35

看起来Robocopy的输出受到了空格的影响。这是可行的:

代码语言:javascript
复制
(robocopy . NULL /l /s /ndl /xx /nc /ns /njh /njs /fp) | % {gci $_.trim()}

它是否更快取决于您过滤文件的方式。如果您的PS版本支持gci cmdlet的-file (因此将筛选交给文件系统提供程序),则PS最快。当Robocopy介于两者之间时,使用Where-Object大约使时间增加一倍(对于这个240个文件的例子):

代码语言:javascript
复制
measure-command {gci -r -file}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 24
Ticks             : 245746
TotalDays         : 2.84428240740741E-07
TotalHours        : 6.82627777777778E-06
TotalMinutes      : 0.000409576666666667
TotalSeconds      : 0.0245746
TotalMilliseconds : 24.5746



measure-command  {gci -r | ? {$_.PSIsContainer -eq $false}}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 48
Ticks             : 480647
TotalDays         : 5.56304398148148E-07
TotalHours        : 1.33513055555556E-05
TotalMinutes      : 0.000801078333333333
TotalSeconds      : 0.0480647
TotalMilliseconds : 48.0647



measure-command {(robocopy . NULL /l /s /ndl /xx /nc /ns /njh /njs /fp)}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 36
Ticks             : 365689
TotalDays         : 4.23251157407407E-07
TotalHours        : 1.01580277777778E-05
TotalMinutes      : 0.000609481666666667
TotalSeconds      : 0.0365689
TotalMilliseconds : 36.5689
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28353925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档