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

PowerShell实现关联WAV文件重命名:与对应TXT文件同步更名

同步重命名同名TXT与WAV文件的解决方案

问题分析

你现有代码能读取TXT内容生成新名称,但存在两个核心问题:

  1. 直接拼接$file$data会导致文件名格式错误($file是FileInfo对象,不是字符串)
  2. 未建立TXT与对应WAV文件的关联逻辑

修改后的完整代码

$txtFiles = Get-ChildItem c:\test\*.txt
foreach ($File in $txtFiles) {
    # 从TXT文件第4、6、7行(索引从0开始)提取内容拼接成标识
    $Data = (Get-Content $File.FullName)[6,7,4] -Join '1'
    # 替换冒号为逗号(原代码的`n是无效文件名字符,若需其他替换请自行调整)
    $Data = $Data -Replace ":", ","
    
    # 构造TXT文件的新名称
    $newTxtName = "$($File.BaseName)$($Data).txt"
    # 重命名TXT文件
    Rename-Item -Path $File.FullName -NewName $newTxtName
    
    # 查找同目录下的同名WAV文件
    $wavFile = Get-ChildItem -Path $File.DirectoryName -Filter "$($File.BaseName).wav" -ErrorAction SilentlyContinue
    if ($wavFile) {
        # 同步构造WAV文件的新名称(与TXT新名称主体一致)
        $newWavBaseName = $newTxtName -replace '\.txt$', ''
        $newWavName = "$newWavBaseName.wav"
        # 重命名WAV文件
        Rename-Item -Path $wavFile.FullName -NewName $newWavName
        Write-Host "已同步重命名:$($wavFile.Name) -> $newWavName"
    } else {
        Write-Host "未找到对应WAV文件:$($File.BaseName).wav"
    }
}

关键说明

  • 文件名构造逻辑:使用$File.BaseName获取原文件名(不含扩展名),避免直接拼接FileInfo对象导致的格式错误
  • WAV文件关联:通过Get-ChildItem+Filter精准匹配同目录下的同名WAV文件,-ErrorAction SilentlyContinue避免找不到文件时抛出错误
  • 同步命名规则:WAV新名称复用TXT新名称的主体部分,确保两者始终同名(仅扩展名不同)
  • 原代码修正:原代码中-Replace ":",","n的n是无效文件名字符,已替换为逗号,若你有其他替换需求可自行调整

你之前尝试代码的问题

Get-ChildItem "C:\test" -recurse | where {$_.fullname.wav -like $_.fullname.txt} | Select name 存在语法错误:

  • $_.fullname是字符串,不能通过.wav/.txt直接调用扩展名
  • 逻辑上无法通过这种方式匹配同名不同扩展名的文件,正确方式是通过BaseName(文件名主体)进行关联

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:45:46