Список последних измененных подкаталогов в каталоге - PullRequest
0 голосов
/ 25 марта 2019

У меня есть один тестовый каталог с подкаталогами:

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

Можно было бы вывести для каждого тестируемого подкаталога имя и версию последнего измененного подкаталога.Предполагая, что 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 Ответ

0 голосов
/ 25 марта 2019

Я не совсем понимаю ваш вопрос. Не могли бы вы попытаться перефразировать вопрос или привести больше / разных примеров?

Я угадал, чего ты пытаешься достичь. Посмотрите на приведенный ниже код.

Я предположил, что ваша структура папок всегда будет одинаковой. Вывод покажет вам самую последнюю из папок с именем «DIR» в каждой папке test- - . Я как бы организовал глубину папок в «уровни», надеясь немного прояснить ситуацию.

Я часто нахожу, что использование 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

Даже если это не то, чего вы пытались достичь, методы могут быть полезны для достижения вашей цели.

EDIT: Я только что заметил, что вы хотите отсортировать папки 1.1 и т. Д., А не папки DIR. Просто добавьте еще один «уровень» с помощью цикла ForEach.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...