Подтвердить что ты не робот

Получить последнюю созданную папку из пути с помощью powershell

Как получить последнюю созданную папку из пути с помощью Windows PowerShell?

У меня есть путь C:\temp, и я хочу найти самую последнюю созданную папку на этом пути.

4b9b3361

Ответ 1

PowerShell работает в основном с конвейером, поэтому большая часть того, что вы будете писать, будет состоять из создания объектов, представляющих некоторую информацию, а также их фильтрации и манипулирования ими. В этом случае объекты представляют собой набор папок.

  • Получить все элементы в папке. Это получит файлы и папки, поэтому шаг 2 необходим. | в конце строки сигнализирует о продолжении конвейера в следующей строке - объекты, созданные Get-ChildItem, будут передаваться по очереди одной команде.

    Get-ChildItem c:\temp |
    
  • Фильтр для папок. К сожалению, нет действительно элегантного способа. Не беспокойтесь о том, что в нем говорится "контейнер", а не "папка". Эти команды работают со многими разными вещами, а не только с файлами и папками, поэтому для именования была использована более общая концепция.

    Where { $_.PSIsContainer } |
    
  • Сортировать по дате, по убыванию, поэтому самая новая папка - первая.

    Sort CreationTime -Descending |
    
  • Выберите первую (самую новую) папку.

    Select -First 1
    

Короче говоря:

gci c:\temp | ? { $_.PSIsContainer } | sort CreationTime -desc | select -f 1

или

(gci c:\temp | ? { $_.PSIsContainer } | sort CreationTime)[-1]

Обе эти строки сильно используют псевдонимы по умолчанию для команд в PowerShell, например ? для Where-Object. Однако вы должны использовать полные имена в сценариях, так как вы никогда не узнаете, как будут выглядеть псевдонимы на других машинах, на которых может работать код.


EDIT: У PowerShell 3 есть дополнительные параметры для Get-ChildItem, которые позволяют вам напрямую фильтровать файлы или папки, поэтому вам не нужен Where:

Get-ChildItem -Directory C:\temp | ...

Как правило, вы будете работать с объектами и их свойствами в PowerShell. Две очень полезные команды: Get-Member и ее псевдоним gm и Get-Command или просто gcm. Get-Member расскажет вам, какие свойства и методы имеет объект; вы просто подключите к нему что-то еще:

Get-ChildItem | gm

сообщит вам, какие файлы свойств и каталоги имеют.

Get-Command отобразит все команды или те, которые соответствуют определенному шаблону. Команды PowerShell стараются быть очень последовательными в использовании глаголов и существительных. Чтобы найти все команды, которые заканчиваются на Object, вы можете попробовать gcm *-Object - это общие команды, работающие с почти всем. Get-Help ForEach-Object затем расскажет вам о конкретной команде ForEach-Object в этом случае.