选择特定文件夹中的文件

时间:2015-01-18 20:01:28

标签: powershell

在我的脚本中,我运行$data = gci d:\ -recurse -force一次,然后我将输出用于不同目的,如文件或文件夹报告,因此无法使用Where-Object过滤main gci命令。现在对于特定的表,我需要通过函数参数从用户指定的目录中的$ data输出中检索文件。这里我用于文件夹:

$regexPath = [regex]::Escape($SpecificDirectory)
$folders = $data | ? {$_.Attributes -eq "Directory" -and $_.FullName -match "^$regexPath"}

但是我不知道如何使用我的$ Data变量的输出来从特定文件夹中获取文件。

2 个答案:

答案 0 :(得分:1)

不确定您正在寻找什么,但以下内容将为您提供d:\ temp \ vm文件夹中的所有文件:

$ data = gci d:\ -recurse -force

$ data |其中{$ _.DirectoryName-like" D:\ temp \ vm" }

答案 1 :(得分:1)

您获取的文件与获取文件夹的方式相同,只是您反转了对象类型的检查(从-eq "Directory"-ne "Directory")。

我建议进行一些优化:

  • 使用PSIsContainer属性是区分文件和文件夹的更简单方法。
  • 模式匹配(运算符-like)提供比正则表达式匹配(运算符-match)更好的性能。

尝试这样的事情:

$data | ? {-not $_.PSIsContainer -and $_.FullName -like "$SpecificDirectory\*"}

如果您只想要$SpecificDirectory中的文件,而不是其子目录中的文件,您还可以执行以下操作:

$data | ? {-not $_.PSIsContainer -and $_.DirectoryName -eq $SpecificDirectory}