使用PowerShell拆分电影文件名并提取年、名、厂牌信息
PowerShell脚本:提取电影文件名信息并保存到单独文件
我来帮你搞定这个需求——用PowerShell遍历电影文件夹,从指定格式的文件名里提取年份、影片名称和出品方,然后把这些信息保存到对应电影的单独文件中。下面是完整的脚本和详细说明:
# 替换成你的电影文件夹路径 $movieFolder = "C:\Path\To\Your\Movies" # 获取文件夹内所有文件(不包含子文件夹) $movieFiles = Get-ChildItem -Path $movieFolder -File # 定义匹配文件名的正则表达式,覆盖你给出的所有格式 $fileNamePattern = '^\[(\d{4})\]\s+(.*?)\s+\[P\d+\](?:\[Director Edition\])?\s+-\s+(.*)$' foreach ($file in $movieFiles) { # 获取不带扩展名的文件名 $baseName = $file.BaseName # 用正则匹配文件名 if ($baseName -match $fileNamePattern) { # 提取匹配到的属性 $year = $matches[1] $movieName = $matches[2].Trim() # 去除名称前后可能的多余空格 $studio = $matches[3].Trim() # 生成信息文件的路径(和原电影文件同名,后缀为txt) $infoFilePath = Join-Path -Path $movieFolder -ChildPath "$($file.BaseName).txt" # 写入信息到文件,使用UTF-8编码避免乱码 @" 年份(Year): $year 影片名称(Name): $movieName 出品方(Studio): $studio "@ | Out-File -Path $infoFilePath -Encoding UTF8 Write-Host "已生成信息文件: $infoFilePath" } else { # 处理不符合格式的文件,输出警告 Write-Warning "文件名不符合格式,跳过处理: $($file.Name)" } } Write-Host "所有文件处理完成!"
脚本详细解释:
- 设置文件夹路径:把
$movieFolder的值替换成你实际存放电影的文件夹路径。 - 获取文件列表:用
Get-ChildItem -File只获取文件夹里的文件,不会遍历子文件夹(如果需要包含子文件夹,可以加上-Recurse参数)。 - 正则表达式说明:
^\[(\d{4})\]:匹配开头的[四位数字]格式,捕获组1提取年份;\s+(.*?)\s+:非贪婪匹配年份后面的影片名称,直到遇到[Pxx]部分;\[P\d+\](?:\[Director Edition\])?:匹配[P数字],同时兼容可选的[Director Edition]后缀(非捕获组,不提取这部分内容);\s+-\s+(.*)$:匹配-前后的空格,然后捕获组3提取出品方名称。
- 遍历处理每个文件:
- 先获取不带扩展名的文件名,避免扩展名干扰匹配;
- 如果匹配成功,提取三个属性并去除可能的多余空格;
- 生成和原电影同名的
.txt文件,写入格式化后的信息; - 如果文件名不符合格式,输出警告提示。
测试效果:
针对你给出的三个文件名:
[1979] Name of the movie [P1] - Disney→ 生成的txt文件内容:年份(Year): 1979 影片名称(Name): Name of the movie 出品方(Studio): Disney[1979] Name of the movie [P1][Director Edition] - PTC→ 生成的txt文件内容:年份(Year): 1979 影片名称(Name): Name of the movie 出品方(Studio): PTC[1980] Name of the movie [P8][Director Edition] - Test→ 生成的txt文件内容:年份(Year): 1980 影片名称(Name): Name of the movie 出品方(Studio): Test
如果后续有其他格式的文件名,只需要调整正则表达式$fileNamePattern即可适配。
内容的提问来源于stack exchange,提问作者maj
相关产品推荐
相关产品推荐

