
这个脚本的主要目的是遍历指定目录(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进行重命名,并输出重命名信息。
处理不包含年级信息的文件名:
- ⭕如果文件名不包含年级信息,但已删除“普通高中教科书·”(如果存在),则输出日志信息,但不进行重命名。


暂无评论
要发表评论,您必须先 登录