VBScript跨文件夹取文件名重命名CSV时GetBaseName类型不匹配问题
错误根因
GetBaseName 方法要求入参为单个文件的路径或名称,你代码中直接传入了oFolder2.Files——这是文件夹2的全部文件构成的集合对象,类型不匹配因此触发报错。如果你的需求是取文件夹2内第一个文件的文件名作为后缀,需要先遍历到具体的文件对象再提取基础名。
修正后可运行代码
Option Explicit Dim ofso, ofolder1, ofolder2, folderName1, folderName2 Dim File, sNewFile, fileSuffix, oFile2 folderName1 = "C:\Users\ShantanuGupta\Desktop\DRUM\Folder1" ' 存放CSV文件的路径 folderName2 = "C:\Users\ShantanuGupta\Desktop\DRUM\Folder2" ' 存放后缀源文件的路径 Set ofso = CreateObject("Scripting.FileSystemObject") Set ofolder1 = ofso.GetFolder(folderName1) Set ofolder2 = ofso.GetFolder(folderName2) ' 取文件夹2中第一个文件的基础名作为后缀 fileSuffix = "" For Each oFile2 In ofolder2.Files fileSuffix = ofso.GetBaseName(oFile2.Name) Exit For ' 仅取第一个文件的名称作为后缀,无需遍历全部 Next ' 后缀为空直接退出,避免异常 If fileSuffix = "" Then WScript.Echo "文件夹2中未找到可用文件" WScript.Quit End If ' 遍历文件夹1的CSV文件完成重命名 For Each File In ofolder1.Files If LCase(ofso.GetExtensionName(File.Name)) = "csv" Then sNewFile = ofso.GetBaseName(File.Name) & "_" & fileSuffix & ".csv" File.Name = sNewFile End If Next
改动说明
- 补充了遍历文件夹2获取单个文件的逻辑,解决
GetBaseName参数类型错误问题 - 补全了
fileSuffix变量的声明,适配Option Explicit的强校验要求 - 优化了重命名逻辑,无需硬编码
Head.csv、Col.csv,自动识别所有CSV文件处理,适配性更强 - 新增空值校验,避免文件夹2无文件时出现逻辑异常
内容的提问来源于stack exchange,提问作者user17538713
相关产品推荐
相关产品推荐

