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

PowerShell批量写入nfo文件第8行文件名编号失效问题

问题根因

批量执行失败的核心问题出在脚本逻辑设计上:

  • 你在ForEach-Object循环里把$filePath写死成了.\*.nfo,每次循环都会匹配当前目录下所有nfo文件,而非当前遍历到的单个文件,会导致所有文件被反复读取、覆盖,最终内容完全错乱。单文件测试时目录下只有1个nfo,通配符.\*.nfo刚好匹配到测试文件,所以功能正常,多文件时该逻辑就会完全失效。
  • 没有做文件行数校验,如果某个nfo文件实际行数不足8行,直接给索引位置7赋值会触发索引越界报错,中断批量执行。
  • 读写文件没有指定编码,PowerShell默认编码可能和nfo文件原有编码不匹配,容易出现写入后乱码的问题。
修复后可直接运行的脚本
Get-ChildItem -Filter "*.nfo" -File | ForEach-Object{
    # 从当前文件名提取编号,生成要写入的标签内容
    $namePart = $_.BaseName -Split ' - '
    $writeContent = "<episode>$($namePart[1])</episode>"

    # 仅读取当前遍历到的单个nfo文件内容,指定UTF8编码避免乱码
    $fileContent = Get-Content -Path $_.FullName -Encoding UTF8
    $targetLineIndex = 7 # 第8行对应数组从0开始计数的索引位

    # 如果文件行数不足8行,自动补空行避免报错
    while ($fileContent.Count -lt 8) {
        $fileContent += ""
    }

    # 替换第8行内容后写回原文件
    $fileContent[$targetLineIndex] = $writeContent
    $fileContent | Set-Content -Path $_.FullName -Encoding UTF8
}
注意事项
  • 脚本默认处理当前执行目录下的所有nfo文件,运行前请把脚本放到nfo所在目录,或者提前在PowerShell中切换到对应目录再执行。
  • 如果你的nfo文件需要使用其他编码(比如GB2312),把脚本里两处UTF8替换为对应编码名称即可。
  • 首次运行建议先复制3-5个测试文件到单独文件夹验证效果,确认写入的编号、位置、编码都符合要求后,再全量处理所有文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:39:15