递归迭代文件

Iterate files recursively

我有一个 powershell 脚本,它从某个网络目录迭代文件。在这个目录下,有大约190个子目录,每个子目录包含几个文件。

我用它来完成工作:

get-childitem -Path $pathFilesOrig -Recurse -Force -Include *.pdf, *.csv | ForEach {
  write-host "INFO:File name: $_"
}

但是,它不会在某些目录中循环,而其中有有效文件并且访问权限很好(我可以通过 windows 资源管理器手动访问这些文件)。

我尝试了以下方法来检查我是否至少可以遍历每个目录:

get-childitem -Path $pathFilesOrig -Recurse -Force | ?{ $_.PSIsContainer } | ForEach {
  write-host "INFO:Dir name: $_"
}

当我这样做时,脚本会显示每个目录。

现在我这样做是为了列出每个目录中的文件:

get-childitem -Path $pathFilesOrig -Recurse -Force | ?{ $_.PSIsContainer } | ForEach {
  write-host "INFO:Dir name: $_"
  $tmpDirName = $pathFilesOrig + $_.Name
  get-childitem -Path $tmpDirName | ForEach {
    Write-Host "INFO:File name: $_"

在这种情况下,同样会丢失一些目录。

甚至没有第二行的结果 write-host "INFO:Dir name: $_" 之前运行良好。

我不明白,我肯定漏掉了什么...

感谢您的帮助。

我怀疑您的问题与 the -Include parameter 有关,它在提供程序收集了所有对象后过滤项目,而 -Filter 在枚举时处理它,即,当它首先获取对象时.您可以通过仅使用 -File 参数枚举文件来进一步提高性能。

#requires -Version 3

Get-ChildItem -Path $pathFilesOrig -Filter *.pdf, *.csv -File -Force -Recurse

如果此命令无法解决您的问题,我怀疑您确实遇到了权限问题,因为 -Force 会获取隐藏目录,但不会取代访问权限。