You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Powershell自定义排序PDF列表生成指定顺序XML文件的实现问题

实现方案

你需要先对文件列表做自定义规则排序后再遍历生成XML,同时原代码存在几处语法和格式错误,修改后可直接运行的代码如下:

$filePath = "D:\"

# 获取文件并按自定义规则排序
$list = Get-ChildItem -Path $filePath -Recurse | `
        Where-Object { $_.PSIsContainer -eq $false -and $_.Extension -eq '.pdf' } | `
        Sort-Object {
            # 自定义排序权重:17相关排第一,EN排第二,其余按文件名排序
            if ($_.Name.Contains('17')) { 0 }
            elseif ($_.Name.Contains('EN')) { 1 }
            else { 2 }
        }, Name

$outputPath = Join-Path $filePath "PDFList.xml"
# 初始化XML内容数组
$xmlContent = @("<PDFList>")

# 遍历生成节点
foreach ($n in $list) {
    $lang = switch -Wildcard ($n.Name) {
        "*EN*" { "English" }
        "*BG*" { "Bulgarian" }
        "*CS*" { "Czech" }
        "*17*" { "17" }
        default { "" } # 可根据需要补充其他文件的语言值
    }
    $xmlContent += "    <PDF><language>$lang</language><filename>$($n.Name)</filename></PDF>"
}

# 加闭合标签
$xmlContent += "</PDFList>"

# 一次性写入文件
$xmlContent | Out-File -FilePath $outputPath -Encoding UTF8

修改说明

  • 新增自定义排序逻辑:通过Sort-Object的计算属性设置排序优先级,含17的文件优先级最高,其次是含EN的文件,剩余文件按文件名升序排列
  • 修复原代码的XML闭合标签错误,原代码结束标签误写为<PDFList>,修正为</PDFList>
  • 替换了原代码中的全角单引号为半角单引号,避免PowerShell识别错误
  • 简化输出逻辑,先把所有XML节点存入数组再一次性写入文件,减少频繁IO操作
  • 把条件判断替换为更简洁的switch语句,可读性更高
  • 新增文件过滤规则只筛选PDF文件,符合你的使用场景

内容的提问来源于stack exchange,提问作者Don Cummins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:48:00