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
相关产品推荐
相关产品推荐

