12

ドキュメントから:

-含む

指定されたアイテムのみを取得します。このパラメーターの値は、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 がどのように機能するかを知っていても、いつ使用するかはわかりません。サブフォルダー内を参照する必要があるのはなぜですか? なぜこれほどまでに複雑になる必要があるのでしょうか。

4

6 に答える 6

15

-include の使用を混乱させています。-include フラグは、パスの内容ではなく、パスに適用されます。再帰フラグを使用しない場合、問題となる唯一のパスは指定したパスです。これが、あなたが与えた最後の例が機能する理由です。パスc:\testには at が含まれているため、に一致し"*t"ます。

これを確認するには、次のことを試してください。

gci -path "c:\test" -in *e*

これにより、ディレクトリ内のすべての子が生成されますが、名前のどれにも一致しません。

-include が recurse パラメーターでより効果的である理由は、階層内のすべてのパスに対してワイルドカードを適用することになるためです。

于 2009-04-26T14:05:43.930 に答える
5

JaredParの answerを参考にすると、Get-ChildItem でパターン マッチングを行うために、一般的なシェル ワイルドカードを使用できます。

例えば:

get-childitem "c:\test\t?st.txt"

どこ "?" 任意の 1 文字に一致するワイルドカード、または

get-childitem "c:\test\*.txt"

これは、「.txt」で終わるすべてのファイル名と一致します。

これにより、探していた「より単純な」動作が得られるはずです。

于 2009-04-26T14:22:15.700 に答える
2

同様の質問をしたところ、Get-ChildItemのGet-Helpに関して3つの簡単な返信がありました。

答えは、コマンドの完全な説明(Get-Help Get-ChildItem -full)にあります。

The Include parameter is effective only when the command includes the

Recurseパラメーターまたはパスは、C:\ Windows *などのディレクトリーの内容につながります。ワイルドカード文字は、C:\Windowsディレクトリーの内容を指定します。

したがって、以下は再帰なしで機能します。

PS C:\ foo> Get-childitem -path "c:\ foo *" -Include * .txt

StackOverflowの質問からPowerShellScripting-Get-ChildItem

これがお役に立てば幸いです:-)

于 2009-09-02T21:40:58.283 に答える