Get-ChildItem无法识别带方括号的MP4文件?求解决方法
解决PowerShell中Get-ChildItem无法识别带方括号MP4文件的问题
嘿,我来帮你搞定这个头疼的问题!你遇到的情况是因为PowerShell里的方括号[]属于通配符(用来表示字符集范围),直接写完整文件名时会被当成匹配规则,而不是字面的文件名。下面给你几个实用的解决方案:
方案一:先通配符过滤,再循环处理
这也是你一开始考虑的思路,先通过-Filter '*.mp4'拿到所有MP4文件,再在ForEach-Object里针对性处理。这种方法不用纠结特殊字符转义,通用性很强:
# 先获取目录下所有MP4文件,再逐个处理 Get-ChildItem -Filter '*.mp4' | ForEach-Object { # 示例:输出文件的完整路径 Write-Host "找到目标文件:$($_.FullName)" # 如果需要针对特定带方括号的文件操作,可添加判断 if ($_.Name -eq '你的文件[带括号].mp4') { # 这里写你要执行的操作,比如复制、移动等 Copy-Item -Path $_.FullName -Destination 'D:\备份文件夹\' } }
方案二:正确转义方括号后直接匹配
如果你明确知道文件名,只需要给每个方括号前加上反引号来转义,让PowerShell把它们当成普通字符解析。比如文件名为movie[2024].mp4`,写法如下:
Get-ChildItem -Path 'movie`[2024`].mp4'
注意:这个方法是用在-Path参数里的,因为-LiteralPath不支持通配符转义,它会完全按照字面解析路径。
方案三:结合-LiteralPath和Where-Object过滤
如果需要遍历目录同时精准匹配文件名,可以先用-LiteralPath指定目录(避免目录名里的特殊字符干扰),再用Where-Object过滤出目标MP4文件:
# 指定目标目录,过滤出所有MP4文件 Get-ChildItem -LiteralPath 'C:\你的目标目录' | Where-Object { $_.Name -like '*.mp4' } # 或者精准匹配某个带方括号的文件 Get-ChildItem -LiteralPath 'C:\你的目标目录' | Where-Object { $_.Name -eq '特定文件名[带括号].mp4' }
这几个方法里,方案一最省心,尤其是当你需要批量处理MP4文件时;如果只是找单个文件,方案二或三都能快速解决问题。
内容的提问来源于stack exchange,提问作者lit
相关产品推荐
相关产品推荐

