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

基于文件第2行前4字符重命名CSV文件的PowerShell脚本问题

解决PowerShell重命名CSV文件的两个问题

你的脚本存在两个核心问题:一是未按要求截取第二行前4个字符,且未处理文件名非法字符;二是没有处理重名文件的冲突。以下是修正后的脚本:

Set-Location -Path C:\temp

Get-ChildItem SAF13000*.csv | ForEach-Object {
    # 读取文件第二行内容,只截取前4个字符(避免行内容过短报错)
    $secondLine = Get-Content $_.FullName -TotalCount 2 | Select-Object -Last 1
    $baseName = $secondLine.Substring(0, [Math]::Min(4, $secondLine.Length))
    
    # 清理文件名中的系统非法字符,替换为下划线
    $invalidChars = [System.IO.Path]::GetInvalidFileNameChars() -join ''
    $cleanBaseName = $baseName -replace "[$invalidChars]", '_'
    
    # 构建初始新文件名
    $newName = "$cleanBaseName.csv"
    $newPath = Join-Path $_.DirectoryName $newName
    
    # 处理重名冲突:如果文件已存在,自动添加递增序号
    $counter = 1
    while (Test-Path $newPath) {
        $newName = "{0}({1}).csv" -f $cleanBaseName, $counter
        $newPath = Join-Path $_.DirectoryName $newName
        $counter++
    }
    
    # 执行重命名并捕获异常
    try {
        Rename-Item -Path $_.FullName -NewName $newName -ErrorAction Stop
        Write-Host "已将 $($_.Name) 重命名为 $newName"
    }
    catch {
        Write-Warning "重命名 $($_.Name) 失败:$_"
    }
}

关键修正说明:

  • 精准截取字符:用[Math]::Min(4, $secondLine.Length)确保即使第二行内容不足4个字符也不会抛出索引越界错误
  • 非法字符清理:调用系统API获取所有禁止的文件名字符,统一替换为下划线,避免路径非法错误
  • 重名冲突处理:通过循环检测目标文件是否存在,自动添加(1)、(2)这类递增序号,解决文件已存在的问题
  • 路径安全处理:全程使用文件完整路径操作,避免因当前目录变化导致的路径错误
  • 异常捕获:用try/catch捕获重命名中的意外错误,输出清晰的失败提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:25:10