1

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

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

这是我到目前为止所拥有的:

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

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

4

3 回答 3

2

这就是我将如何做到的

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

$dirs |?{ dir $_ -Recurse |?{!$_.PsIsContainer -and $_.LastWriteTime -gt $oneDayAgo } | select -first 1 }
于 2012-08-21T17:56:22.837 回答
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.
    }
}
于 2012-08-21T17:45:23.970 回答
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*"

于 2012-08-21T18:01:57.640 回答