2017-11-01 8 views
1

"-filter" を使用して:Windows10/Powershell:Get-Childitemを使用するときに-includeパラメータを使用する方法?

Get-ChildItem -file -filter "*.txt" | foreach-object { write-host $_.FullName}

私は現在のフォルダにあります4つの.txtファイルの一覧を取得します。

私は "-include"

Get-ChildItem -file -include *.txt | foreach-object { write-host $_.FullName } 
Get-ChildItem -file -include *txt | foreach-object { write-host $_.FullName } 

を使用してみましたし、私は何を取得。私は "-file"パラメータを付けて試してみましたが、違いはありません。

私は様々なガイド/例(ss64.com/TechNetなど)を見てきたと思いますが、私はそれを正しくやっています。

私は間違っていますか?ありがとう!

enter image description here

+0

関連:https://stackoverflow.com/questions/33684178/powershell-5-get-childitem-literalpath-doesnt-work-with-include-anymore –

答えて

4

を:

-Includeパラメータは、コマンドに-Recurseパラメータが含まれているか、パスがC:\Windows*などのディレクトリの内容につながっている場合にのみ有効です。「*」ワイルドカード文字でC:\Windowsディレクトリの内容が指定されています。

あなたは-includeを指定し、何でもそれがないことは、文字通り未定義であるという事実にもかかわらず-recurseを指定しない場合は、構文エラーを得ることはありませんことに注意しましょう。 C:\Windows*は、 "C:\Windowsディレクトリ内のすべてのファイル"に対する通常のワイルドカード表現ではありません。これは、 "C:\ディレクトリの 'Windows'で始まり、拡張子がある場合とない場合があるすべての項目のワイルドカード表現です。 Get-ChildItemの作者が何をすると思われるか分かりません。彼らはそれを文書化し、それを実装するのは非常に貧弱な仕事をしてきました。

したがって、-Includeパラメータが壊れている/間違って書かれているのを避けます。私はそれが何をすべきかわからない-Filterはしません。私はそれが正確に何かについての記事を読んだ。何らかの形で「そのレベルでフィルタリングするために、その値を基になるプロバイダに渡します」。なぜ彼らは、システム管理者が実際に何を意味するのか知っていると思うのか分かりません。私の理解は、それぞれのディレクトリ項目にDirectoryInfo.GetFiles()を呼び出すことと、各ディレクトリ項目に対してDirectoryInfo.GetFiles('*.txt')を呼び出すことの違いですが、ほとんどのシステム管理者はその意味を理解していません。しかし、それは私がそれを信じていないので、私はそれが何のことを約95%確信していますが、私はまだ決してそれを使用することはありませんので、

は代わりに、私はWhere-Objectにちょうどパイプ:

Get-ChildItem -file | Where-Object Extension -eq '.txt' | [...] 

またGet-ChildItem-LiteralPath-RecurseとのPowerShellのいくつかのバージョンでは-Includeで破壊されていることに注意し、代わりにすべてのアイテムを返します。

は比較:

Get-ChildItem -LiteralPath $PSHOME *.exe -Recurse # works 
Get-ChildItem -Path $PSHOME -Include *.exe -Recurse # works 
Get-ChildItem -LiteralPath $PSHOME -Include *.exe -Recurse # does NOT work 

問題はV6のためhereを報告しました。

+0

技術的な例では、繰り返しパラメータを使用していません。ありがとう! – mrjayviper

+1

@mrjayviper '-LiteralPath'を使用すると' -Include'と '-Exclude'も無視されます。私はそのことを忘れていましたが、いくつかのバージョンでは年齢のバグでした。 –

+0

'-Filter'は1つのパターン文字列に制限されます(' -Include'はmultipleをサポートします)。そして、あなたが暗示しているように、 '-Filter'は通常、' -LiterlPath'と '-Recurse'を使って、より効率的で適切に動作します。要約すると、1つのパターンだけが必要な場合は、 '-Filter'を使います。複数のパターンが必要な場合は、提案したように 'where'を使います(基本的なプロバイダではなく、PowerShellでフィルタリングを行うため、' -Include'と基本的に同じです)。 –

1

再帰のない私にとっては、これらの作業:

Get-ChildItem -Path "C:\Users\Athom\Desktop\*.txt" 


Get-ChildItem -Path ".\*.txt" 

それとも再帰パラメータを追加:Get-ChildItemためGet-Helpページから

Get-ChildItem -Include *.txt -Recurse 
関連する問題