Windows命令提示符/PowerShell中实现Globbing patterns匹配执行命令的可行性咨询
在Windows CMD/PowerShell中实现类似的Globbing模式匹配执行
你问的这种通过通配符模式(比如/b?n/ca? /etc/pa??wd)自动解析并执行对应命令(比如cat /etc/passwd)的行为,在Windows的原生命令行环境里默认是不支持的,具体分两种情况来看:
1. 命令提示符(CMD)
CMD的通配符(?匹配单个字符、*匹配任意字符)仅用于文件路径匹配,完全不会处理命令名称的模式解析。比如你输入/b?n/ca?,CMD只会把它当作一个无效路径报错,根本不会尝试将其映射为cat命令——更何况原生CMD里连cat命令都没有(除非你额外安装了GNU工具集或类似组件)。所以原生CMD里没法实现你要的这种操作。
2. PowerShell
PowerShell的通配符功能比CMD强,但默认同样只针对文件路径、对象属性等进行匹配,不会自动解析命令名的模式。不过PowerShell的扩展性很强,你可以自己写一个自定义函数来实现这个逻辑,比如:
function Invoke-GlobCmd { param([string]$InputPattern) # 拆分模式为命令部分和路径部分(按第一个空格分割) $patternParts = $InputPattern -split ' ', 2 if ($patternParts.Count -ne 2) { Write-Host "请输入包含命令模式和路径模式的字符串,例如:/b?n/ca? /etc/pa??wd" return } $cmdPattern = $patternParts[0] $pathPattern = $patternParts[1] # 查找匹配命令模式的可用命令 $matchedCmd = Get-Command -Name $cmdPattern -ErrorAction SilentlyContinue if (-not $matchedCmd) { Write-Host "找不到匹配模式 '$cmdPattern' 的命令" return } # 查找匹配路径模式的文件/路径 $matchedPaths = Get-Item -Path $pathPattern -ErrorAction SilentlyContinue if (-not $matchedPaths) { Write-Host "找不到匹配模式 '$pathPattern' 的路径" return } # 执行匹配到的命令 & $matchedCmd $matchedPaths }
把这个函数添加到你的PowerShell配置文件($PROFILE)里,之后就可以通过Invoke-GlobCmd "/b?n/ca? /etc/pa??wd"来触发解析执行了(注意:Windows原生环境没有/etc/passwd,这个例子适合WSL或类Unix兼容环境)。
额外说明
如果你是在Windows终端里使用WSL(Windows Subsystem for Linux),那直接用Linux的shell(比如Bash、Zsh)就原生支持这种globbing模式解析,因为类Unix shell会自动展开命令名和路径的通配符。
内容的提问来源于stack exchange,提问作者jagghy
相关产品推荐
相关产品推荐

