正则表达式用dir命令直接进入Powershell

dmz*_*dmz 5 regex powershell

我正在尝试列出所有具有.rar或.zip文件类型的文件。

我尝试过正则表达式,例如可以在在线正则表达式帮助器中找到的正则表达式,但是这些似乎都不起作用。

也许问题是尝试直接在cmd / powershell而不是脚本中执行此操作?

dir *./(zip|rar)/
Run Code Online (Sandbox Code Playgroud)

预期的结果将类似于:file1.rar file2.rar file3.zip

Cod*_*ing 5

在 Powershell 中,dirGet-ChildItem. 您不能直接使用正则表达式。Powershell 将您的正则表达式解释为通配符。

如其他答案和Get-ChildItem 文档中所述,您可以使用逗号分隔搜索词。dir *.zip,*.rar,这是一个别名

Get-ChildItem -path *.zip,*.rar
Run Code Online (Sandbox Code Playgroud)

如果您想使用正则表达式,您需要将 的结果分配Get-ChildItem给一个变量,然后使用-match.

> $dir = Get-ChildItem
> $dir -match "\.(zip|rar)$"
Run Code Online (Sandbox Code Playgroud)

或者使用括号将其变成一行:

(Get-ChildItem) -match "\.(zip|rar)$"
Run Code Online (Sandbox Code Playgroud)

  • 感谢您更新。好的一点是,明确要求使用正则表达式(虽然这里并不严格需要,但其他情况可能需要正则表达式)。是的,“-match”匹配任何子字符串,这与基于通配符的“-like”/基于参数的通配符匹配不同,其中整个输入字符串必须匹配。顺便说一句:在 PowerShell _Core_ 中,`Get-ChildItem` 输出现在字符串化为_完整路径_,因此执行 `(Get-ChildItem).Name` 会更安全,以便将匹配限制为仅文件_names_,但随后您只得到名称:输出也。`(Get-ChildItem).Where({ $_.Name -match '\.(zip|rar)$' })` 保留输出类型。 (2认同)