Z dokumentacji:Zmieszany z -Include parametr cmdlet Get-ChildItem
-include
Pobiera tylko określone elementy. Wartość tego parametru kwalifikuje parametr Ścieżka. Wprowadź element lub deseń ścieżki, na przykład "* .txt". Symbole wieloznaczne są dozwolone.
włączeń parametr jest skuteczne tylko wtedy, gdy komenda zawiera parametr recurse lub ścieżka prowadzi do zawartości katalogu , takich jak C: \ Windows *, gdzie symbol wieloznaczny określa zawartość C: \ katalog Windows.
Moje pierwsze zrozumienie było:
c:\test\a.txt
c:\test\b.txt
Tak, aby uzyskać 'a.txt' i 'b.txt' mogę napisać:
gci -Path "c:\test\*" -Include "*.txt"
I to działa. Ale teraz rozważyć taką hierarchię:
c:\test\a.txt
c:\test\b.txt
c:\test\c.txt\c.txt
Te same powraca polecenie: a.txt, b.txt, c.txt
Rzeczywista logika wydaje się być:
-include używane aby dopasować wszystkie elementy określone przez -Path. Jeśli dopasowany element jest plikiem - zwróć go. Jeśli pasuje element jest folderem, zajrzyj do środka i zwróć pasujące elementy potomne pierwszego poziomu.
Również dokumentacja powiedzieć:
włączeń parametr jest skuteczne tylko wtedy, gdy komenda zawiera parametr recurse lub ścieżka prowadzi do zawartości katalogu ...
To również jest złe. Na przykład.
gci -Path "c:\test" -Include "*.txt"
Nic nie zwraca, natomiast bez opcji -Interclude otrzymuję zawartość folderu. Tak-Include jest zdecydowanie "skuteczny". Co tak naprawdę się tutaj dzieje? -Path określa "c: \ test", a -Include próbuje dopasować tę ścieżkę. Ponieważ "* .txt" nie pasuje do "testu", więc nic nie wróciło. Ale spójrz na to:
gci -Path "c:\test" -Include "*t"
Zwraca a.txt, b.txt i c.txt jako "* t" dopasowane "test" i dopasowane wszystkie elementy podrzędne.
W końcu, nawet wiedząc, jak działa teraz Włącz, nie rozumiem, kiedy go używać. Dlaczego powinienem szukać wewnątrz podfolderów? Dlaczego miałoby to być tak skomplikowane?
Używam programu PowerShell-v2.0-CTP3, a Twój przykład generuje pusty zestaw. – alex2k8
@ alex2k8, Nie jestem pewien, co powiedzieć tutaj. Próbowałem tego przykładu w wersji 1.0 i późniejszej wersji 2.0, oba dają takie same wyniki. – JaredPar
@Jared, to dziwne. Proszę, możesz spróbować gci -path c: \ * -in *. Widzę dzieci z c: \ i wszystkich podfolderów o jeden poziom niżej. Oto podobny opis http://www.eggheadcafe.com/software/aspnet/32624832/getchilditem-include-qu.aspx – alex2k8