这个脚本的主要目的是遍历指定目录(D:\电子课本教科书)及其子目录下的所有文件,找到所有扩展名为.pdf的文件,并根据文件名中的年级信息对这些文件进行重命名。
脚本
# 设置根目录路径 $rootDirectory = "D:\电子课本教科书" # 确保路径存在 if (!(Test-Path -Path $rootDirectory)) { Write-Host "指定的路径不存在:$rootDirectory" -ForegroundColor Red exit 1 } # 遍历指定目录中的所有文件 Get-ChildItem -Path $rootDirectory -File -Recurse | Where-Object { $_.Extension -eq ".pdf" } | ForEach-Object { # 提取文件名(不含扩展名) $fileName = [System.IO.Path]::GetFileNameWithoutExtension($_.Name) # 删除文件名中的 "普通高中教科书·" 部分(如果存在) $fileName = $fileName -replace "普通高中教科书·", "" # 定义一个字典来将中文年级转换为数字 $gradeMap = @{ "一" = "1"; "二" = "2"; "三" = "3"; "四" = "4"; "五" = "5"; "六" = "6"; "七" = "7"; "八" = "8"; "九" = "9"; "十" = "10" } # 检查文件名中是否包含年级信息 if ($fileName -match "(一|二|三|四|五|六|七|八|九|十)年级(上册|下册|全册|全一册)") { # 捕获匹配到的年级(并转换为数字)和册次 $gradeNum = $gradeMap[$matches[1]] $edition = $matches[2] $nianji ="年级" $cccitu ="_玩机大学" # 构建新的文件名(包含已转换的年级和删除的前缀) $newFileName = "$gradeNum$nianji$edition.pdf" # 获取当前文件的完整路径 $oldFilePath = $_.FullName # 构建新文件的完整路径(保持目录结构不变) $newFilePath = [System.IO.Path]::Combine([System.IO.Path]::GetDirectoryName($oldFilePath), $newFileName) # 如果新文件名与旧文件名不同,则进行重命名 if ($oldFilePath -ne $newFilePath) { Write-Host "Renaming '$oldFilePath' to '$newFilePath'" -ForegroundColor Cyan Rename-Item -Path $oldFilePath -NewName $newFilePath } } else { # 如果文件名不包含年级信息,但已删除 "普通高中教科书·"(如果存在),则检查是否需要仅基于此更改重命名 # 注意:这里假设如果仅删除了前缀但文件名没有年级信息,则不进一步操作 # 如果需要,可以添加逻辑来基于仅删除前缀来重命名文件 # 仅为了日志记录,输出未转换年级但已删除前缀的文件名(可选) Write-Host "Deleted prefix but no grade found in '$fileName' of file '$($_.FullName)'" -ForegroundColor Yellow } }
解读
设置根目录路径:
- ⭕$rootDirectory = "D:\电子课本教科书":设置要遍历的根目录路径。
确保路径存在:
- ⭕使用Test-Path检查指定的路径是否存在。
- ⭕如果路径不存在,则输出错误信息并以红色字体显示,然后退出脚本。
遍历指定目录中的所有文件:
- ⭕使用Get-ChildItem遍历指定目录及其子目录下的所有文件。
- ⭕使用Where-Object筛选出扩展名为.pdf的文件。
处理每个PDF文件:
- ⭕对于每个找到的 PDF 文件,提取文件名(不含扩展名)。
- ⭕删除文件名中的“普通高中教科书·”部分(如果存在)。
- ⭕定义一个字典$gradeMap,用于将中文年级转换为数字。
检查文件名中是否包含年级信息:
- ⭕使用正则表达式检查文件名中是否包含年级和册次信息。
- ⭕如果包含,捕获年级和册次信息,并根据字典将年级转换为数字。
- ⭕构建新的文件名,格式为年级数字+年级+册次.pdf。
重命名文件:
- ⭕如果新文件名与旧文件名不同,则使用Rename-Item进行重命名,并输出重命名信息。
处理不包含年级信息的文件名:
- ⭕如果文件名不包含年级信息,但已删除“普通高中教科书·”(如果存在),则输出日志信息,但不进行重命名。
暂无评论
要发表评论,您必须先 登录