Powershell获得顶级父文件夹

时间:2012-08-21 16:47:20

标签: powershell

我的最终目标是获取最后一天修改文件的顶级文件夹列表(对于给定路径)。

可能有很多方法可以做到这一点。我遇到问题的地方只是获得顶级文件夹。

这是我到目前为止所做的:

Get-ChildItem -Path "c:\data\*" -recurse | 
where-object {$_.lastwritetime -gt (get-date).addDays(-1)} |  
where-object {-not $_.PSIsContainer} | 
Foreach-Object { $_.DirectoryName} | 
sort -unique 

它获取了所有目录,而不仅仅是顶层。

3 个答案:

答案 0 :(得分:2)

以下是我将如何做到这一点

$dirs = dir "sometoplevelpath" |?{ $_.PsIsContainer }
$oneDayAgo = (Get-Date).AddDays(-1)

$dirs |?{ dir $_ -Recurse |?{!$_.PsIsContainer -and $_.LastWriteTime -gt $oneDayAgo } | select -first 1 }

答案 1 :(得分:1)

您可以获取最终的文件夹列表,并比较它们的完整路径,而不是它们的名称,看它是否与包含您感兴趣的文件夹的目录相匹配:

$folders | Where-Object {$_.FullName.Replace($_.Name,"") -eq $superDirectory}

其中$ superdDirectory是包含“顶级目录”的目录的名称。在这种情况下,听起来像“C:\”。

您还可以调查PSParentPath属性。

另一种方法是首先制作潜在备份文件夹列表:

$targetFolders = Get-Item -Path "C:\data*" | Where-Object {$_.PSIsContainer}

然后浏览该列表,看看他们是否有任何需要备份的项目,如果他们这样做就会采取行动。

$targetFolders | % {
    $folderItems = Get-ChildItem $_.FullName | ? {.... use your filter here}
    if (($folderItems | Measure-Object).Count -gt 0){
        #Backup the folder, or add $_.FullName to the list of folders that should be backed up.
    }
}

答案 2 :(得分:0)

尝试删除-recurse

Get-ChildItem -Path "c:\data*" | where-object {$_.lastwritetime -gt (get-date).addDays(-1)} | where-object {-not $_.PSIsContainer} | Foreach-Object {$_.DirectoryName} | sort -unique

我还将$.更改为$_.。看看这是否有效。我得到它只给我顶级目录名称,但我没有任何我可以像"c\data*"

这样的模式运行