2017-12-04 13 views
3

Linuxの場合、Bashは、a,b、およびc以外の1文字に対して[!abc]のようなnegation syntax in glob patternをサポートしています。PowerShellはグロブパターンで否定構文をサポートしていますか?

私はPowerShellで似たようなものを見つけようとしています。

Supporting Wildcard Characters in Cmdlet Parametersには、否定に関する記述はありません。また、test.txtが存在すると、!がBashのような否定構文としてサポートされていないことを示す以下のことを確認しました。

  • ls tes[!s].txtは何も返しません。
  • ls tes[!t].txt戻りtest.txt

グロブパターンでPowerShellのサポート否定構文をしていますか?そうでない場合は、いくつかの選択肢を共有できますか?

答えて

6

いいえ、(文書化されていない、または動作していないそのような機能から正しく推測したように)

代替は正規表現ですが、あなたはその後、自分でフィルタリングを行う必要があるだろう:

Get-ChildItem | Where-Object Name -match '^tes[^t]\.txt$' 
+3

'は、Get-ChildItemコマンドレット '?TESを.TXT' | Where-Object {$ _。Name -notlike 'tes [qrs] .txt'} 'は別のオプションです。 –

+1

同意。できるだけ左側にフィルターを設置してください。 –

+2

AnsgarとBillが言っていることをもう少し説明するために、Get-ChildItemフィルタを設定することにより、結果をフィルタリングしてからPowerShellに送信するようにプロバイダに指示します。プロバイダーはフィルタリングの結果を含め、その仕事で非常に効率的です(結局のところ、仕事が1つしかありません)ので、PowerShellよりもはるかに高速です。可能であれば、プロバイダレベルで常にフィルタリングしてください。 – TheMadTechnician

関連する問題