我想知道是否有一种快速简便的方法来搜索包含多个字符的文件名并删除这些字符后面的所有字符。
例如如果我有一个名为的文件:
Great Movie Title 2021 1080p asldkfjalfj.mkv
Another Great Movie 1997 480p aldfasdfa.avi
Boring movie but its ok 2015 720p asadfqwr.mp4
我想在文件名中找到,,1080p
然后删除其后的所有内容。720p
480p
我知道您可以使用 Windows 批处理For
循环,但您只能使用单个字符来找到它。即使第三方应用程序可以做到这一点,但我似乎找不到它。
答案1
您正在搜索整个驱动器,还是仅搜索单个目录?
无论哪种方式,PowerShell 都可以处理这个问题。
这将对整个 C 盘进行重命名,文件名中包含 1080p 的所有文件:
cd c:\
Get-ChildItem -recurse -include *1080p* | foreach-object { $name = $_.fullname; $newname = $name -replace '1080p.*\.','1080p.'; rename-item $name $newname }
然后您可以对 480p 和 720p 重复此操作。
答案2
电源外壳是正确的做法。
这是另一种方法,可以一次性完成所有这些并轻松进行修改。
这将从顶层文件夹运行。这样做可以释放-Path
(此处为位置)参数以按多种文件类型进行过滤,因为-Path
与 不同-Filter
, 可以采用值数组。
Get-ChildItem *.mkv, *.avi, *.mp4 -Recurse | ForEach {
If ( $_.BaseName -match '^.+(1080p|720p|480p)' ) {
Rename-Item -LiteralPath $_.FullName -NewName ( $matches[0] + $_.Extension )
}
}
正则表达式'^.+(1080p|720p|480p)'
匹配从文件名开头到包含任意一个“或”(|
)解析字符串的所有字符。该文本存储在$matches
自动变量中,并用于构造新名称。