PowerShell脚本子目录适配及CSV翻译错位问题修复请求
PowerShell脚本修复:CSV翻译更新的两个问题解决
问题1:子目录无法匹配对应_Inglese文件
原因
原代码构造_Inglese文件路径时,硬编码使用了根目录$SourceDir,而非当前CSV文件所在的子目录,导致子目录里的CSV找不到对应的翻译文件。
修复方法
将_Inglese文件路径的构造代码从:
$column3FilePath = Join-Path -Path $SourceDir -ChildPath $column3FileName
修改为:
$column3FilePath = Join-Path -Path $csvFile.DirectoryName -ChildPath $column3FileName
问题2:带※的多行翻译内容错位
原因
原代码按索引逐行匹配CSV和_Inglese内容,但_Inglese中带※的行属于上一个条目的多行翻译内容,直接按索引匹配会导致后续翻译条目全部错位,对应到错误的CSV条目上。
修复方法
先预处理_Inglese文件,把带※的行合并到前一个有效条目里,生成和CSV条目数量一致的翻译列表,再一一对应更新。
完整修复后的脚本
param( $SourceDir = $PWD, $OutDir = $PWD, $OutFileSuffix = "output" # 输出文件后缀 ) # 获取所有CSV文件(包含子目录) $csvFiles = Get-ChildItem -Path $SourceDir -Recurse -Filter "*.csv" foreach ($csvFile in $csvFiles) { # 构造对应_Inglese文件的路径(修复问题1:用CSV所在目录) $column3FileName = "{0}_inglese.txt" -f $csvFile.BaseName $column3FilePath = Join-Path -Path $csvFile.DirectoryName -ChildPath $column3FileName if (Test-Path $column3FilePath) { # 导入CSV(自动处理跨行字段) $primaryCsv = Import-Csv -Encoding utf8 -Path $csvFile.FullName # 读取_Inglese文件内容 $column3Data = Get-Content -Encoding utf8 $column3FilePath # 预处理_Inglese内容:合并带※的行到前一个条目 $processedTranslations = @() foreach ($line in $column3Data) { if ($line -match "※") { # 带※的行,追加到最后一个条目 if ($processedTranslations.Count -gt 0) { $processedTranslations[-1] += "`n$line" } } else { # 普通行,添加为新条目 $processedTranslations += $line } } # 一一对应更新CSV的第二列(translation列) for ($i = 0; $i -lt $primaryCsv.Count; $i++) { if ($i -lt $processedTranslations.Count) { $primaryCsv[$i].translation = $processedTranslations[$i] } } # 构造输出文件路径 $outputFilePath = Join-Path -Path $csvFile.DirectoryName -ChildPath ("{0}{1}.csv" -f $csvFile.BaseName, $OutFileSuffix) # 导出带BOM的UTF-8 CSV $primaryCsv | Export-Csv -Path $outputFilePath -NoTypeInformation -Encoding UTF8 } else { Write-Warning "未找到$($csvFile.Name)对应的翻译文件" } }
关键修复说明
- 子目录适配:通过
$csvFile.DirectoryName定位_Inglese文件,确保子目录中的CSV能找到同目录下的翻译文件。 - 多行翻译合并:遍历_Inglese文件时,把带※的行直接追加到上一个翻译条目,生成和CSV条目数量匹配的翻译列表,避免索引错位。
- CSV跨行处理:
Import-Csv会自动识别未闭合引号的跨行字段,确保CSV条目数量和实际内容一致。
内容的提问来源于stack exchange,提问作者Edoardo Endrizzi
相关产品推荐
相关产品推荐

