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