Из документации:
-Include
Получает только указанные элементы.
Значение этого параметра соответствует
параметр Path. Введите путь
элемент или шаблон, например "* .txt".
Подстановочные знаки разрешены.
Параметр Включить действует только тогда, когда команда
включает параметр 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. Если соответствует элемент
это файл - верните его. Если соответствует
Элемент - это папка, загляните внутрь и
верните соответствие детям первого уровня.
Также в документации сказано:
Параметр Включить действует только тогда, когда команда
включает параметр 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» и сопоставляет все дочерние элементы.
В конце концов, даже зная, как теперь работает Включить, я не понимаю, когда его использовать. Зачем мне это нужно искать внутри подпапок? Почему это должно быть так сложно?