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

使用VBScript的FSO实现批量文件重命名,去除随机后缀段

VBScript 用FileSystemObject实现指定前缀文件重命名

需求概述

需要批量重命名指定目录下的文件,规则如下:

  • 目标文件固定前缀包含:
    StT_QX10
    StT_QY20
    StT_QE50
    StT_QG70
    StT_QH90
    
  • 服务器生成的文件格式为:[固定前缀]_2位数字_19位数字.txt,例如:
    StT_QX10_46_9448513023277552554.txt
    StT_QY20_31_7886000158142287461.txt
    StT_QE50_55_2426936282534604666.txt
    StT_QG70_39_8749067416635922512.txt
    StT_QH90_27_2363684982157969174.txt
    
  • 重命名后需保留固定前缀+.txt,例如:
    StT_QX10.txt
    StT_QY20.txt
    StT_QE50.txt
    StT_QG70.txt
    StT_QH90.txt
    

现有代码问题

你提供的代码存在以下问题:

  1. 文件路径拼接错误:"C:\BOE\StT_" & Arr(I) 会生成类似 C:\BOE\StT_StT_QX10 的无效路径,多了重复的StT_前缀
  2. 仅判断单个精确文件名是否存在,没有遍历匹配前缀的所有目标文件
  3. 缺少核心的文件重命名逻辑

修正后的完整代码

Set FSO = CreateObject("Scripting.FileSystemObject")
Dim targetFolderPath, prefixArr, folder, file, prefix, newFileName, newFilePath

' 指定目标目录
targetFolderPath = "C:\BOE\"
prefixArr = Array("StT_QX10", "StT_QY20", "StT_QE50", "StT_QG70", "StT_QH90")

' 先检查目标目录是否存在
If Not FSO.FolderExists(targetFolderPath) Then
    MsgBox "目标目录不存在: " & targetFolderPath
    WScript.Quit
End If

Set folder = FSO.GetFolder(targetFolderPath)

' 遍历目录下所有文件
For Each file In folder.Files
    ' 逐个匹配前缀规则
    For Each prefix In prefixArr
        ' 判断文件名是否以指定前缀+下划线开头,且为txt格式
        If InStr(1, file.Name, prefix & "_", vbTextCompare) = 1 And LCase(FSO.GetExtensionName(file.Name)) = "txt" Then
            newFileName = prefix & ".txt"
            newFilePath = targetFolderPath & newFileName
            
            ' 避免覆盖已存在的目标文件
            If FSO.FileExists(newFilePath) Then
                MsgBox "目标文件已存在,跳过重命名: " & newFilePath
            Else
                ' 捕获重命名时的异常(如权限不足)
                On Error Resume Next
                file.Name = newFileName
                If Err.Number <> 0 Then
                    MsgBox "重命名失败: " & file.Name & vbCrLf & "错误信息: " & Err.Description
                    Err.Clear
                End If
                On Error GoTo 0
            End If
            ' 匹配到前缀后跳出内层循环,避免重复处理
            Exit For
        End If
    Next
Next

' 释放对象
Set file = Nothing
Set folder = Nothing
Set FSO = Nothing
MsgBox "重命名操作完成"

代码关键说明

  • 目录预检查:先确认目标目录存在,避免后续无意义的文件遍历操作
  • 精准前缀匹配:用InStr判断文件名是否以[前缀]_开头,确保只匹配带随机后缀的目标文件,同时限制为txt格式
  • 安全重命名:检查目标文件是否已存在,避免意外覆盖;加入错误捕获,处理权限不足、文件被占用等异常情况
  • 效率优化:匹配到对应前缀后立即跳出内层循环,减少不必要的判断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:47:07