PowerShell是否支持glob模式中的否定语法?

Tom*_*ota 3 powershell glob

在Linux中,击支持在glob模式否定语法[!abc]为比其它一个字符a,bc.

我试图在PowerShell中找到类似的东西.

Cmdlet参数中支持通配符时,没有与否定相关的描述.此外,当test.txt存在时,我确认了以下内容,这表明!不支持像Bash这样的否定语法.

  • ls tes[!s].txt 没有回报.
  • ls tes[!t].txt 回报 test.txt

PowerShell是否支持glob模式中的否定语法?如果没有,你能分享一些选择吗?

Joe*_*oey 6

不,它没有(正如你从这样的功能中正确推断出没有记录,也没有工作).

另一种方法是正则表达式,但您必须自己进行过滤,然后:

Get-ChildItem | Where-Object Name -match '^tes[^t]\.txt$'
Run Code Online (Sandbox Code Playgroud)

  • `Get-ChildItem'tes?.txt'| Where-Object {$ _.Name-notlike'tes [qrs] .txt'}`将是另一种选择. (3认同)
  • 为了解释一下Ansgar和Bill所说的内容,通过使用`Get-ChildItem`过滤器,它告诉提供者在将它们发送到PowerShell之前过滤它的结果.提供者在它的工作上非常有效(毕竟,它只有一个工作),包括过滤结​​果,因此它比PowerShell快得多.始终尽可能在提供商级别进行过滤. (2认同)