получить последнюю созданную папку из пути с помощью powershell - PullRequest
31 голосов
/ 13 сентября 2011

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

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

1 Ответ

72 голосов
/ 13 сентября 2011

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

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

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

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

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

    Select -First 1
    

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

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

или

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

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


РЕДАКТИРОВАТЬ: PowerShell3 имеет дополнительные параметры для 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 в данном случае.

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