定位匹配字符串或部分字符串的所有子目录
Locating all subdirectories matching a string or partial string
我基本上需要在不知道完整路径的情况下将变量设置为文件夹路径。
我的问题是我需要找到一个名为 "DirA" 的目录。但是这个目录可能位于 "DirB\" 或 "DirB\DirC" 中,有时它们可能包含的目录名称不同。
我知道无论如何目录路径的第一部分都是相同的,所以我想过对文件夹名称使用 -recurse
过滤器,但有时我要查找的目录的名称并不完全相同通常预期的那个,有时最后会多一个字母。
是否可以做类似...
$MyVariable = Get-ChildItem D:\Data\Dir1 -Recurse | Where-Object {$_.name -like "name"} -Directory |
% { $_.fullname }
非常感谢任何帮助!
尝试这样的事情:
$BaseDir = "C:\Dir1"
$NameToFind = "\DirA"
$MyVariable = Get-ChildItem $BaseDir -Recurse | Where-Object { $_.PSIsContainer -and $_.Name.EndsWith($NameToFind)}
这应该遍历树中的所有目录,从 C:\Dir1 开始,return 返回给您的目录对象 DirA。
如果只需要目录的路径,就用:
$MyVariable.FullName
您可以像现在一样使用 Get-ChildItem 和递归,放入 where-object 以仅获取目录,然后还使用名称过滤器。使用您尝试查找始终位于 Dir1 内某处的 DirA(但它后面可能有字母)的示例,此查询应该有效:
$MyVariable = Get-Childitem D:\Data\Dir1 -recurse | Where-Object {$_.PSIsContainer -and $_.name -like "*DirA*" | Select-Object -expandproperty fullname
您不需要 post 使用 Where-Object
处理此问题。 -Filter
已经可以为您准备好了。如果您至少有 PowerShell 3.0,那么您可以完全删除 Where-object
。
(Get-ChildItem -Path D:\Data\Dir1 -Filter "*DirA*" -Recurse -Directory).Fullname
这将 return 路径下具有确切名称 DirA 的所有目录。如果您需要部分匹配,则只需使用简单的通配符:-Filter "Dir*some"
如果运行 PowerShell 2.0 那么您可以执行以下操作。
Get-ChildItem -Path D:\Data\Dir1 -Filter "*DirA*" -Recurse | Where-Object {$_.PSIsContainer} | Select-Object -ExpandProperty Fullname
您好,找到下面的脚本,它应该可以工作,如果有误,请纠正我,
$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
}
}
}
你可以在 Powershell 3.0+ 中以这种方式完成
$MyVariable = (dir -r -Filter "DirA*" -Path "D:\Data\Dir1").FullName
“dir -r”是“Get-ChildItem -Directory -Recurse”的别名
我基本上需要在不知道完整路径的情况下将变量设置为文件夹路径。
我的问题是我需要找到一个名为 "DirA" 的目录。但是这个目录可能位于 "DirB\" 或 "DirB\DirC" 中,有时它们可能包含的目录名称不同。
我知道无论如何目录路径的第一部分都是相同的,所以我想过对文件夹名称使用 -recurse
过滤器,但有时我要查找的目录的名称并不完全相同通常预期的那个,有时最后会多一个字母。
是否可以做类似...
$MyVariable = Get-ChildItem D:\Data\Dir1 -Recurse | Where-Object {$_.name -like "name"} -Directory |
% { $_.fullname }
非常感谢任何帮助!
尝试这样的事情:
$BaseDir = "C:\Dir1"
$NameToFind = "\DirA"
$MyVariable = Get-ChildItem $BaseDir -Recurse | Where-Object { $_.PSIsContainer -and $_.Name.EndsWith($NameToFind)}
这应该遍历树中的所有目录,从 C:\Dir1 开始,return 返回给您的目录对象 DirA。
如果只需要目录的路径,就用:
$MyVariable.FullName
您可以像现在一样使用 Get-ChildItem 和递归,放入 where-object 以仅获取目录,然后还使用名称过滤器。使用您尝试查找始终位于 Dir1 内某处的 DirA(但它后面可能有字母)的示例,此查询应该有效:
$MyVariable = Get-Childitem D:\Data\Dir1 -recurse | Where-Object {$_.PSIsContainer -and $_.name -like "*DirA*" | Select-Object -expandproperty fullname
您不需要 post 使用 Where-Object
处理此问题。 -Filter
已经可以为您准备好了。如果您至少有 PowerShell 3.0,那么您可以完全删除 Where-object
。
(Get-ChildItem -Path D:\Data\Dir1 -Filter "*DirA*" -Recurse -Directory).Fullname
这将 return 路径下具有确切名称 DirA 的所有目录。如果您需要部分匹配,则只需使用简单的通配符:-Filter "Dir*some"
如果运行 PowerShell 2.0 那么您可以执行以下操作。
Get-ChildItem -Path D:\Data\Dir1 -Filter "*DirA*" -Recurse | Where-Object {$_.PSIsContainer} | Select-Object -ExpandProperty Fullname
您好,找到下面的脚本,它应该可以工作,如果有误,请纠正我,
$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
}
}
}
你可以在 Powershell 3.0+ 中以这种方式完成
$MyVariable = (dir -r -Filter "DirA*" -Path "D:\Data\Dir1").FullName
“dir -r”是“Get-ChildItem -Directory -Recurse”的别名