使用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
现有代码问题
你提供的代码存在以下问题:
- 文件路径拼接错误:
"C:\BOE\StT_" & Arr(I)会生成类似C:\BOE\StT_StT_QX10的无效路径,多了重复的StT_前缀 - 仅判断单个精确文件名是否存在,没有遍历匹配前缀的所有目标文件
- 缺少核心的文件重命名逻辑
修正后的完整代码
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
相关产品推荐
相关产品推荐

