Имена файлов, соответствующие регулярному выражению, но в папке с подстановочными знаками - PullRequest
0 голосов
/ 26 ноября 2018

Это следующий вопрос: Вывод объединенной команды PowerShell для Get-ChildItem

Этот код работает нормально:

Get-ChildItem -Path "D:\Wim\TM1\TI processes" -Filter "*.vue" -Recurse -File |
    Where-Object { $_.BaseName -match '^[0-9]+$' } |
    ForEach-Object { ($_.FullName -split '\\')[-2,-1] -join '\' } |
    Out-File D:\wim.txt

Но мне нужно ограничитьпапка поиска только для определенных папок, в основном этот фильтр: D:\Wim\TM1\TI processes\\*}vues (так что все подпапки заканчиваются на }vues).

Если я добавлю это условие подстановки, я не получу результата.Без ограничений я получаю правильный результат.Возможно ли это, пожалуйста?

without filter

with filter

Идея состоит в том, чтобы избавиться от 3-гострока в первом выводе (который я копировал / вставлял), а также чтобы минимизировать количество папок для просмотра.

1 Ответ

0 голосов
/ 26 ноября 2018

Вы можете вкладывать два Get-ChildItem звонка:

  • Внешний Get-ChildItem -Directory -Recurse вызов для фильтрации каталогов представляющих интерес в первую очередь,

  • внутренний Get-ChildItem -File вызов, который для каждого найденного каталога анализирует и обрабатывает файлы , представляющие интерес.

Get-ChildItem -Path "D:\Wim\TM1\TI processes" -Filter "*}vues" -Recurse -Directory |
  ForEach-Object {
    Get-ChildItem -LiteralPath $_.FullName -Filter "*.vue" -File | 
      Where-Object { $_.BaseName -match '^[0-9]+$' } | 
        ForEach-Object { ($_.FullName -split '\\')[-2,-1] -join '\' }                 
  } | Out-File D:\wim.txt

Примечание. Предполагается, что все *.vue интересующие файлы находятся непосредственно в каждой папке *}vues.


Что касается того, что вы пытались :

Учитывая то, что вы ограничиваете перечисляемые элементы файлами (-File), шаблон подстановочного знака для каталога *}vues никогда не будет соответствовать ни одному каталогу имен и, при отсутствии файлов , соответствующих этому шаблону, возвращает ничто .

Как правило, с -Recurse это концептуально чище не для добавления шаблона с подстановочными знаками непосредственно к аргументу -Path, чтобы лучше сигнализировать, что шаблон будет сопоставляться в каждом каталоге вподдерево.

В вашем случае вы бы заметили вашу попытку фильтрации вдвойне , учитывая, что вы также , используя параметр -Filter.

...