Как получить последнюю созданную папку из пути с помощью Windows PowerShell?
У меня есть путь C:\temp
, и я хочу найти самую последнюю созданную папку на этом пути.
Как получить последнюю созданную папку из пути с помощью Windows PowerShell?
У меня есть путь C:\temp
, и я хочу найти самую последнюю созданную папку на этом пути.
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
в этом случае.