Странные результаты Powershell GCI Recurse с использованием Wildcard - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь использовать GCI с аргументом Recurse, чтобы получить список всех файлов в подпапках указанного пути.

Я использую следующую строку:

gci 'C:\temp\TestRecurse\*\*' -Recurse

Под папкой TestRecurse у меня есть следующее:

TestRecurse
 |---b.txt
 |---dir1
 |------a.txt

Я ожидаю, что a.txt будет возвращен. Тем не менее, я получаю a.txt и b.txt. Мне незнакомец, если я помещу a.txt в другую подпапку:

TestRecurse
 |---b.txt
 |---dir1
 |------dir2
 |---------a.txt

То же утверждение выше только возвращает a.txt. Я сбит с толку относительно того, как изменяется беспорядок с местоположением a.txt, когда возвращается b.txt. Может кто-нибудь объяснить мне, почему это происходит и почему вообще возвращается b.txt?

Обновление

Я должен упомянуть, хотя они ценятся, я не обязательно ищу обходной путь. Это часть более крупного скрипта в нашей среде, который отвечает за перемещение файлов различными способами, стараясь сохранять гибкость. Он ведет себя не так, как я ожидал, поэтому я пытаюсь понять, почему он работает так, как есть. Как отмечает PetSerAl, понимание Get-ChildItem может быть более сложным, чем оно того стоит.

Спасибо!

1 Ответ

0 голосов
/ 09 мая 2018

Вы включаете подстановочный знак для родительского каталога (TestRecurse\*), поэтому вы также получаете файлы, содержащиеся в нем. Попробуйте получить список папок TestRecurse, а затем выполнить их итерацию.

Состав:

TestRecurse\b.txt
TestRecurse\dir1
TestRecurse\dir1\a.txt

Код:

Get-ChildItem 'C:\tmp\TestRecurse\' | `    # Get the list of items within TestRecurse
   ? {$_.PSIsContainer} | `                # Filter items that are folders
   % {Get-ChildItem $_.FullName -Recurse}  # Iterate through and get all items within those folders

Возвращает только папки и файлы внутри dir1, но не сам dir1.

...