You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

含方括号路径的PowerShell脚本修改文件内容报错求助

解决PowerShell修改带方括号的隐藏.nfo文件时的路径错误问题

首先,你的错误根源在于手动给文件名添加反引号转义——PowerShell里,当你已经拿到Get-ChildItem返回的FileInfo对象时,完全不需要手动转义方括号这类特殊字符,直接使用对象自带的属性(比如FullName)或者直接传递对象给文件操作命令,PowerShell会自动处理路径中的特殊字符。你手动转义后,脚本试图寻找带反引号的文件名(比如[FileName] Martic.nfo),但实际文件并不存在,所以才会报找不到文件的错误。

下面是修正后的可用脚本:

Get-ChildItem -Hidden -Filter *.nfo | ForEach-Object {
    $find = '<studio>StudioName</studio>'
    $replace = '<studio>Studio Name</studio>'
    # 直接使用FileInfo对象的FullName属性,无需手动转义特殊字符
    $content = Get-Content -Path $_.FullName -Raw
    $updatedContent = $content.Replace($find, $replace)
    $updatedContent | Set-Content -Path $_.FullName
}

关键修改点说明:

  • 移除了手动转义文件名的代码:删掉了$file = $_.Name -replace '\[','[' -replace ']',']'这部分冗余操作,直接用$_.FullName获取完整文件路径,PowerShell会正确解析带方括号的路径。
  • 新增-Raw参数读取文件:一次性读取整个文件内容,比逐行读取更高效,还能避免处理换行符时的潜在问题。
  • 拆分操作步骤:把内容读取、替换、写入分开,让脚本逻辑更清晰,也方便后续调试。

另外,考虑到.nfo文件通常是XML格式,更推荐使用PowerShell的XML原生处理能力,这样能避免字符串替换可能带来的格式问题(比如空格、换行导致匹配失败),示例如下:

Get-ChildItem -Hidden -Filter *.nfo | ForEach-Object {
    $xml = [xml](Get-Content -Path $_.FullName -Raw)
    $studioNode = $xml.SelectSingleNode('//studio')
    if ($studioNode) {
        $studioNode.InnerText = 'Studio Name'
        $xml.Save($_.FullName)
    }
}

这种方法更安全,能精准定位XML节点修改内容,不会破坏文件的XML结构。

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

火山引擎 最新活动