【问题标题】:List last modified sub-directories in a directory列出目录中最后修改的子目录
【发布时间】:2019-03-25 15:02:42
【问题描述】:

我有一个带有子目录的测试目录:

C:\test
    - test1
          - test-1-1
                    - DIR1
                          - 1.0
          - test-1-2
                    - DIR2  => Latest modified sub dir
                          - 1.1
    - test2
          - test-2-1 
                    - DIR1  => Latest modified sub dir
                          - 1.3
          - test-2-2
                    - DIR1
                          - 1.2

可以为test中的每个子目录输出最新修改的子目录的名称和版本。假设 DIR1 或 DIR2 可以是任何名称。

最终的看法更像:

test-1-2 1.1
test-2-1 1.3

目前我能得到的唯一输出是只有最新的test*-*-* 而不是 DIR*:

gci 'C:\test' |where { $_.psiscontainer } |foreach { get-childitem $_.name |sort creationtime | select -expand name -last 1 }

    PS C:\test> gci 'C:\test' |where { $_.psiscontainer } |foreach { get-childitem $_.name |sort creationtime | select -expand name -last 1 }
test-1-2
test-2-1

【问题讨论】:

  • [1] 您所需输出的示例与您描述的不匹配。以下缺少 DIR1 >> test-2-1 1.3 -Directory 参数用于Get-ChildItem。 ///// [3]一旦你有了一个目录,你可以使用.Parent属性会给你包含那个项目的目录。
  • 一般来说,我想输出版本目录,在那个案例 DIR* 中的父目录是最后修改的,并且只显示那个版本而不是全部。所以在第一个例子中应该只输出test-1-2 1.1
  • ok ---- 但是您一直将DIR* 称为最新的...然后只显示该最新目录的父级和子级。这不是你一直在描述的。 [皱眉]

标签: powershell


【解决方案1】:

我不太明白你的问题。您能否尝试重新表述问题,或提供更多/不同的示例?

我猜测了您要达到的目标。看看下面的代码。

我假设您的文件夹结构总是相同的。输出将显示每个 test-- 文件夹中名为“DIR”的最新文件夹。我将文件夹的深度组织成“级别”,希望能让事情变得更清晰。

我经常发现使用 ForEach 和 s 脚本块比在管道中使用 'ForEach-Object' 可以更好地控制数据。

$Level1 = Get-ChildItem -Path "C:\test" -Directory

ForEach ($D1 in $Level1)
{
    Write-Host "Getting ChildItem of DIR: $($D1.FullName)"

    $Level2 = Get-ChildItem -Path $D1.FullName -Directory

    ForEach ($D2 in $Level2)
    {
        Write-Host "Getting ChildItem of DIR: $($D2.FullName)`n`n"

        $LastModDir = Get-ChildItem -Path $D2.FullName -Directory | Sort-Object CreationTime | Select-Object Name -Last 1

        Write-Host "$D2 $($LastModDir.Name)"
    }
}

输出:

test-1-1 DIR1
test-1-2 DIR2
test-2-1 DIR1
test-2-2 DIR2

即使这不是您想要实现的目标,这些技术也可能对您实现目标有用。

编辑: 我刚刚注意到您想要对 1.1 等文件夹进行排序,而不是 DIR 文件夹。只需使用 ForEach 循环添加另一个“级别”。

【讨论】:

  • 我只想输出最新修改的子目录及其子目录(假设是版本),而不是全部。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-03
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
  • 2018-04-04
  • 2013-03-19
  • 2016-08-01
相关资源
最近更新 更多