2015-01-18 3 views
0

В моем сценарии я запускаю один раз $data = gci d:\ -recurse -force, затем я использую вывод для разных целей, например, отчеты о файлах или папках, поэтому невозможно отфильтровать главную команду gci с помощью Where-Object. Теперь для конкретной таблицы мне нужно получить файлы из моего вывода $ data в каталоге, указанном пользователем через параметр функции. Вот что я использую для папок:Выбор файлов в определенных папках

$regexPath = [regex]::Escape($SpecificDirectory) 
$folders = $data | ? {$_.Attributes -eq "Directory" -and $_.FullName -match "^$regexPath"} 

Но я понятия не имею, как можно использовать выход моего переменного $ Data, чтобы получить файлы из определенной папки.

ответ

1

Вы получаете файлы так же, как вы получаете папки, только чтобы вы инвертировали проверку для типа объекта (от -eq "Directory" до -ne "Directory").

я рекомендовал бы некоторые оптимизации, хотя:

  • Использование PSIsContainer свойства является более простым способом отличить filees и папки.
  • Соответствие шаблону (оператор -like) обеспечивает лучшую производительность, чем соответствие регулярных выражений (оператор -match).

Попробуйте что-то вроде этого:

$data | ? {-not $_.PSIsContainer -and $_.FullName -like "$SpecificDirectory\*"} 

Если вы хотите только файлы в $SpecificDirectory, а не его подкаталогов, вы можете также сделать что-то вроде этого:

$data | ? {-not $_.PSIsContainer -and $_.DirectoryName -eq $SpecificDirectory} 
+0

Большое спасибо! – kekimian

1

Не уверен, что именно то, что вы ищете, но следующие предоставит вам все файлы в D: \ Temp \ VM папки:

$ данных = GCI d: \ -recurse -force

$ данные | Где {$ _. DirectoryName -like "D: \ temp \ vm"}

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