2016-06-10 3 views
1

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

Допустим, у меня есть структура папок, как это:

  • C: \ Inetpub \ Updates \ updatefolder1
  • C: \ Inetpub \ Updates \ updatefolder1 \ Web \
  • C: \ Inetpub \ обновления \ updatefolder1 \ Web \ (код сайта, структура продолжается)
  • C: \ Inetpub \ Updates \ updatefolder1 \ Scripts \ (DB скрипты)
  • C: \ Inetpub \ Updates \ updatefolder2
  • C: \ Inetpub \ Updates \ updatefolder2 \ Web \ (код сайта, структура продолжается)

Теперь, когда я использую Еогеасп, он будет выглядеть следующим образом:

$folders = Get-ChildItem $UpdateDir -Directory -Recurse -Depth 1 | Select-Object FullName 

ForEach($folder in $folders) { 
    $folder = folder.TrimStart("@{FullName=").TrimEnd("}") #To get a clean name 
} 

Результат будет должны быть следующими:

C:\inetpub\updates\updatefolder1 
C:\inetpub\updates\updatefolder2 
C:\inetpub\updates\updatefolder1\Web\ 
C:\inetpub\updates\updatefolder1\Web\ (site code, the structure goes on) 
C:\inetpub\updates\updatefolder1\Scripts\ (db scripts) 
C:\inetpub\updates\updatefolder2\Web\ (site code, the structure goes on) 

Что не в порядке. Он должен выглядеть следующим образом:

C:\inetpub\updates\updatefolder1 
C:\inetpub\updates\updatefolder1\Web\ 
C:\inetpub\updates\updatefolder1\Web\ (site code, the structure goes on) 
C:\inetpub\updates\updatefolder1\Scripts\ (db scripts) 
C:\inetpub\updates\updatefolder2 
C:\inetpub\updates\updatefolder2\Web\ (site code, the structure goes on) 

Есть свежие идеи? Я пробовал несколько вещей, кроме этого цикла foreach, до сих пор не повезло.

Заранее спасибо.

+0

1. код выложили здесь, кажется, есть много опечаток. 2. Чего вы пытаетесь достичь? 3. Оба результата, которые вы опубликовали, выглядят одинаково, кроме последовательности/порядка. Можете ли вы проверить один раз и подтвердить? – SavindraSingh

+0

Проблема заключается в ужасном хаке, который вы используете, чтобы получить полное имя. Удалите весь цикл 'ForEach' и измените первую строку на' $ folders = Get-ChildItem $ UpdateDir -Directory -Recurse -Depth 1 | Select-Object -Expand FullName' – TheMadTechnician

+0

@SavindraSingh Typos? Где ? Кроме того, что я забыл добавить переменную для фактического вывода. – Ramil

ответ

0

Цикл ForEach не нужен, его можно заменить на -expandproperty в выбранном объекте. Если я правильно понял вопрос, проблема, которую вы вызываете, заключается в том, что результаты не сортируются. Ответ для сортировки результатов с помощью `Sort-Object»

Пример

$folders = Get-ChildItem $UpdateDir -Directory -Recurse -Depth 1 | 
    Select-Object -ExpandProperty fullname | 
    Sort-Object 
$folders 
+0

Спасибо! Именно этого я и хотел. И извините за плохое объяснение, я сосать объяснение, я был бы самым страшным учителем. Именно поэтому я добавил визуальное представление. Я попытался взломать его на неделю, и решение было таким простым, черт возьми. – Ramil

Смежные вопросы