ドキュメントから:
-含む
指定されたアイテムのみを取得します。このパラメーターの値は、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
実際のロジックは次のようです。
-Path で指定されたすべてのエンティティに一致させるために使用される -Include。一致した要素がファイルの場合 - それを返します。一致した要素がフォルダーの場合、内部を調べて、一致する第 1 レベルの子を返します。
また、ドキュメントには次のように記載されています。
Include パラメーターは、コマンドに Recurse パラメーターが含まれている場合、またはパスがディレクトリの内容につながる場合にのみ有効です...
これも間違っています。例えば
gci -Path "c:\test" -Include "*.txt"
何も返されませんが、 -Include がないとフォルダーのコンテンツが取得されます。だから -Include は間違いなく「効果的」です。ここで実際に何が起こるのでしょうか? -Path は「c:\test」を指定し、-Include はこのパスとの一致を試みます。「*.txt」は「test」と一致しないため、何も返されませんでした。しかし、これを見てください:
gci -Path "c:\test" -Include "*t"
"*t" が "test" に一致し、すべての子項目に一致したため、a.txt、b.txt、および c.txt が返されます。
結局のところ、Include がどのように機能するかを知っていても、いつ使用するかはわかりません。サブフォルダー内を参照する必要があるのはなぜですか? なぜこれほどまでに複雑になる必要があるのでしょうか。