# 脚本功能:批量给现有 Markdown 文章添加 pid 字段,按发布时间升序排列(1, 2, 3...) $postsPath = "content/post" $files = Get-ChildItem -Path $postsPath -Filter "*.md" Write-Host "正在扫描文章..." $postData = @() foreach ($file in $files) { $content = Get-Content $file.FullName -Raw -Encoding UTF8 # 提取日期 if ($content -match "(?m)^date:\s*([0-9T:-\s]+)") { $dateStr = $matches[1].Trim() try { $date = [DateTime]::Parse($dateStr) } catch { $date = $file.CreationTime } } else { $date = $file.CreationTime } $postData += [PSCustomObject]@{ Path = $file.FullName Date = $date Content = $content } } # 按时间排序 $sortedPosts = $postData | Sort-Object Date $id = 1 foreach ($post in $sortedPosts) { $content = $post.Content # 检查是否已有 pid if ($content -match "(?m)^pid:\s*\d+") { # 更新 pid $newContent = $content -replace "(?m)^pid:\s*\d+", "pid: $id" } else { # 插入 pid (在第二个 --- 之前,或者在 layout/title 之后) # 简单策略:在第一个 --- 后面插入 # 注意:Raw string start with --- if ($content -match "^---\s*\r?\n") { $newContent = $content -replace "^---\s*\r?\n", "--`npid: $id`n" } else { # 异常情况,直接追加 Write-Host "Skipping $($post.Path) (No front matter found)" continue } } # 保持 UTF8 编码 (无 BOM 或带 BOM 取决于原文件,这里统一用 UTF8) [System.IO.File]::WriteAllText($post.Path, $newContent, [System.Text.Encoding]::UTF8) Write-Host "Updated $($post.Path) with pid: $id" $id++ } Write-Host "处理完成!共更新 $($id - 1) 篇文章。"