递归迭代文件
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
会获取隐藏目录,但不会取代访问权限。
我有一个 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
会获取隐藏目录,但不会取代访问权限。