找到与字符串或部分字符串匹配的所有子目录

Dew*_*nes 7 filesystems powershell powershell-2.0 get-childitem

我基本上需要在不知道完整路径的情况下将变量设置为文件夹路径.

我的问题是我需要找一个名为"DirA"的目录.但是这个目录可能位于"DirB \"或"DirB\DirC"中,有时它们可​​能包含的目录名称也不相同.

我知道目录路径的第一部分将是相同的,所以我想到使用-recurse过滤器到文件夹名称,但有时我正在寻找的目录不像通常预期的那样,有时是额外的最后的信.

是否有可能做某事......

$MyVariable = Get-ChildItem D:\Data\Dir1 -Recurse | Where-Object {$_.name -like "name"} -Directory |
% { $_.fullname }
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏!

小智 16

尝试这样的事情:

$BaseDir = "C:\Dir1"
$NameToFind = "\DirA"

$MyVariable = Get-ChildItem $BaseDir -Recurse | Where-Object { $_.PSIsContainer -and $_.Name.EndsWith($NameToFind)}
Run Code Online (Sandbox Code Playgroud)

这应该遍历树中的所有目录,从C:\ Dir1开始,并将目录对象DirA返回给您.

如果您只需要目录的路径,只需使用:

$MyVariable.FullName
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 5

您无需使用进行后期处理Where-Object-Filter可以帮你拿到这个 如果至少具有PowerShell 3.0,则可以将Where-object其完整删除。

(Get-ChildItem -Path D:\Data\Dir1 -Filter "*DirA*" -Recurse -Directory).Fullname
Run Code Online (Sandbox Code Playgroud)

这将返回路径下具有DirA确切名称的所有目录。如果需要部分匹配,则只需使用简单的通配符:-Filter "Dir*some"

如果运行PowerShell 2.0,则可以执行以下操作。

Get-ChildItem -Path D:\Data\Dir1 -Filter "*DirA*" -Recurse | Where-Object {$_.PSIsContainer} | Select-Object -ExpandProperty Fullname
Run Code Online (Sandbox Code Playgroud)