Из документации:
-Include
Извлекает только указанные элементы. Значение этого параметра соответствует параметр Path. Введите путь элемент или шаблон, например "*.txt". Подстановочные знаки разрешены.
Параметр Include эффективен только тогда, когда команда включает параметр Recurse или путь приводит к содержанию каталог, такой как C:\Windows *, где подстановочный знак указывает содержимое каталога C:\Windows.
Мое первое понимание:
c:\test\a.txt
c:\test\b.txt
Итак, чтобы получить "a.txt" и "b.txt", я могу написать:
gci -Path "c:\test\*" -Include "*.txt"
И это работает. Но теперь рассмотрим такую иерархию:
c:\test\a.txt
c:\test\b.txt
c:\test\c.txt\c.txt
Эта же команда возвращает: a.txt, b.txt, c.txt
Фактическая логика выглядит следующим образом:
-Include используется для соответствия всем объектам, указанным -Path. Если согласованный элемент это файл - вернуть его. Если сопоставлено элемент - это папка, загляните внутрь и возвращать соответствующие дети первого уровня.
Кроме того, в документации говорится:
Параметр Include эффективен только тогда, когда команда включает параметр Recurse или путь приводит к содержанию каталог...
Это неправильно. Например.
gci -Path "c:\test" -Include "*.txt"
Он ничего не возвращает, а без -Include я получаю содержимое папки. Итак -Include определенно "эффективен". Что на самом деле происходит здесь? Параметр -Path указывает "c:\test", а -Include пытается сопоставить этот путь. Поскольку "*.txt" не соответствует "test", поэтому ничего не возвращается. Но посмотрите на это:
gci -Path "c:\test" -Include "*t"
Он возвращает a.txt, b.txt и c.txt как "* t", соответствующий "test" и сопоставляет все дочерние элементы.
В конце концов, даже зная, как Include работает сейчас, я не понимаю, когда его использовать. Зачем мне это нужно, чтобы посмотреть в подпапки? Почему это должно быть так сложно?