Подсчет подпапок папки

Я пытаюсь удалить временные файлы ASP .NET, создав сценарий PowerShell. До сих пор мне удавалось найти под C:\Windows\Microsoft .NET\Temporary .NET Files файлы (не папки) старше 60 дней и удалить их. Но моя проблема сейчас в том, что под C:\Windows\Microsoft .NET\Temporary .NET Files есть папка с именем root. Эта папка имеет только одну подпапку. Я хочу

  • Подсчитайте, сколько подпапок существует в корневой папке.
  • Если есть только одна папка, ничего не делайте.
  • Если их несколько, оставьте самую последнюю папку и удалите остальные.

Как это можно сделать с помощью PowerShell?


person user20092013    schedule 10.08.2015    source источник


Ответы (1)


Перейдите в эту корневую папку, отфильтруйте результаты для каталогов (элементы, для которых свойство PSIsContainer равно $true) и подсчитайте результаты:

Get-ChildItem 'C:\path\to\root' -Recurse |
  ? { $_.PSIsContainer } |
  Measure-Object |
  select -Expand Count

Если у вас есть PowerShell v3 или новее, вы можете упростить это, вызвав Get-ChildItem с параметром -Directory:

Get-ChildItem 'C:\path\to\root' -Recurse -Directory |
  Measure-Object |
  select -Expand Count
person Ansgar Wiechers    schedule 10.08.2015
comment
Я запустил скрипт, но Get-ChildItem : A positional parameter cannot be found that accepts argument ' $_.PSIsContainer '. At C:\Users\Christos\Documents\cleanup.ps1:1 char:15 + Get-ChildItem <<<< "C:\Windows\Microsoft.NET\Framework*\v*\Temporary ASP.NET Files\root" -R ? { $_.PSIsContainer } | Measure-Object | select -Expand Count + CategoryInfo : InvalidArgument: (:) [Get-ChildItem], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand - person user20092013; 10.08.2015
comment
Извините, я неправильно набрал команду. Игонь комментарий выше. это сработало. Теперь моя проблема в том, что в папке C:\Windows\Microsoft .NET\Temporary .NET у меня есть 7 подпапок, так как у меня есть 7 сайтов в моем IIS. Как я могу синтаксизировать скрипт (с помощью цикла) для каждой папки, и если счетчики 0 или 1 ничего не делать, иначе удалите папки. Например, у меня C:\Windows\Microsoft .NET\Temporary .NET\root C:\Windows\Microsoft .NET\Temporary .NET\site1 C:\Windows\Microsoft .NET\Temporary .NET\site2 C:\ Windows\Microsoft .NET\Temporary .NET\site3 и количество папок root, site1, site2 и site3. - person user20092013; 10.08.2015
comment
Пожалуйста, не двигайте цель. Если у вас есть новый вопрос: опубликуйте новый вопрос. - person Ansgar Wiechers; 10.08.2015
comment
Я имею в виду, что я не хотел бы объявлять каждую подпапку вручную в сценарии, но эти пути сохраняются в переменной, и для каждого подсчитывается, сколько существует подпапок, и выполняется упомянутый мной процесс. - person user20092013; 10.08.2015
comment
Конечно, я опубликую новый вопрос. - person user20092013; 10.08.2015