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

qzlgjiam  于 2023-04-12  发布在  Shell
关注(0)|答案(5)|浏览(205)

我基本上需要在不知道完整路径的情况下将变量设置为文件夹路径。
我的问题是我需要找到一个名为“DirA”的目录。但是这个目录可能位于“DirB\”或“DirB\DirC”中,有时它们可能包含的目录名称并不相同。
我知道目录路径的第一部分将是相同的,所以我想使用一个-recurse过滤器的文件夹名称,但有时我正在寻找的目录是不是命名很像一个通常预期,有时一个额外的字母结束。
有没有可能做一些像...

$MyVariable = Get-ChildItem D:\Data\Dir1 -Recurse | Where-Object {$_.name -like "name"} -Directory |
% { $_.fullname }

任何帮助都非常感谢!

aiazj4mn

aiazj4mn1#

试试这样的方法:

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

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

这应该遍历树中的所有目录,从C:\Dir1开始,并将目录对象DirA返回给您。
如果你只想要一个层次的结果,删除-Recurse
如果你只需要目录的路径,只需要用途:

$MyVariable.FullName
olhwl3o2

olhwl3o22#

您不需要使用Where-Object进行后期处理。-Filter已经可以为您获取此内容。如果您至少拥有PowerShell 3.0,则可以完全删除Where-object

(Get-ChildItem -Path D:\Data\Dir1 -Filter "*DirA*" -Recurse -Directory).Fullname

这将返回Path下所有具有确切名称DirA的目录。如果您需要部分匹配,则只需使用简单的通配符:-Filter "Dir*some"
如果您使用PowerShell 2.0,您可以执行以下操作。

Get-ChildItem -Path D:\Data\Dir1 -Filter "*DirA*" -Recurse | Where-Object {$_.PSIsContainer} | Select-Object -ExpandProperty Fullname
zfciruhq

zfciruhq3#

嗨,找到下面的脚本,它应该工作纠正我的情况下,如果它是错误的,

$rootFolder = "D:\Data" ##Mention the root folder name here###

$folderItems = (Get-ChildItem $rootFolder) 

$subfolderslist = (Get-ChildItem $rootFolder -recurse | Where-Object {$_.PSIsContainer -eq $True -and $_.Name -like "*2018-08*"} | Sort-Object)

foreach ($curfolder in $subfolderslist)
{

    #Write-Host 'Folder Name '$curfolder  yyyy-mm-dd
    $subFolderItems = (Get-ChildItem $curfolder.FullName) 

    foreach($item in $subFolderItems)
    {

      $currentfile=$rootFolder+"\"+$curfolder+"\"+$item
      #Write-Host 'file path '$mfilepath
      Write-Host " "

     if ((Get-Item $currentfile ).length -gt 3mb)
      { 
        Write-Host "File size greater than 3 MB hence "$true
      }
      else 
       {
         Write-Host "File size less than 3 MB hence "$false
       }

    } 

}
2vuwiymt

2vuwiymt4#

你可以像现在这样使用Get-ChildItem和递归,抛出一个where-object来只抓取目录,然后还可以使用一个名称过滤器。以你的例子为例,试图找到DirA(但它后面可能有字母),它总是在Dir 1的某个地方,这个查询应该可以工作:

$MyVariable = Get-Childitem D:\Data\Dir1 -recurse | Where-Object {$_.PSIsContainer -and $_.name -like "*DirA*" | Select-Object -expandproperty fullname
z4bn682m

z4bn682m5#

您可以在Powershell3.0+中使用这种方法

$MyVariable = (dir -r -Filter "DirA*" -Path "D:\Data\Dir1").FullName

“dir -r”是“Get-ChildItem -Directory -Recurse”的别名

相关问题