当前位置:

首页 > 编程开发 > 在VB中遍历文件并用正则表达式完成复制及vb实现重命名、拷贝文件夹的方法

在VB中遍历文件并用正则表达式完成复制及vb实现重命名、拷贝文件夹的方法

在VB开发中,利用FSO对象和正则表达式可实现文件按规则复制,如将文件名含“1项目”或“一项目”的文件复制到目标目录;同时也可实现文件夹重命名与拷贝,代码结构清晰,可直接套用或微调。

本文目录

    在VB开发中,经常需要处理文件的批量操作——比如按特定规则复制文件、重命名文件夹等。下面这段代码演示了一个典型场景:从“源文件”目录中,把文件名包含“1项目”、“一项目”等内容的文件,复制到指定的目标目录。实现方式结合了正则表达式匹配与文件系统对象(FSO),思路清晰,值得参考。

    先看下在VB中遍历文件并用正则表达式完成复制功能

    在VB中遍历文件并用正则表达式完成复制及vb实现重命名、拷贝文件夹的方法

    将E:\my汇报成绩路径下源文件中的“1项目”、“一项目”等文件复制到目标文件下。以下为实现方式。

    Private Sub Option1_Click()
    Dim myStr As String
    
    '通过在单元格中输入项目序号,目前采用的InputBox方式指定的,也可通过此方式。二者取其一。
    'myStr = Sheets(“Sheet1”).Range(“D21”).Text
     '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     '通过InputBox输入项目序号Start
     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     myStr = InputBox("请输入项目序号,序号要为阿拉伯数字。格式一定要正确!格式如" & Chr(34) & "2项目" & Chr(34))
     '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     '通过InputBox输入项目序号End
     '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     Dim endNum As Integer 'MID函数截取结束位数
     endNum = InStrRev(myStr, "项")
     myStr = Mid(myStr, 1, endNum - 1)
     'MsgBox myStr
     Dim CChinesStr As String
     CChineseStr = CChinese(myStr) '将阿拉伯数字转为汉字
     'MsgBox CChineseStr
     '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     '遍历路径下的文件Start
     '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     Dim fso As Object
     Dim folder As Object
     Dim subfolder As Object
     Dim file As Object
     Dim fileNameArray As String
     Dim basePath As String
     basePath = "E:my汇报成绩"
     Set fso = CreateObject("scripting.filesystemobject") '创建FSO对象
     Set folder = fso.getfolder(basePath & "源文件")
     For Each file In folder.Files '遍历根文件夹下的文件
     'fileNameArray = fileNameArray & file & "|"
      Dim mRegExp As Object '正则表达式对象
      Dim mMatches As Object '匹配字符串集合对象
      Dim mMatch As Object '匹配字符串
      Set mRegExp = CreateObject("Vbscript.Regexp")
      With mRegExp
       .Global = True    'True表示匹配所有, False表示仅匹配第一个符合项
       .IgnoreCase = True    'True表示不区分大小写, False表示区分大小写
       '.Pattern = "([0-9])?[.]([0-9])+|([0-9])+" '匹配字符模式
       '.Pattern = "((([0-9]+)?)|(([一二三四五六七八九十]+)?))项目(([一二三四五六七八九十]+)?)|([0-9])?" '匹配字符模式
       '.Pattern = "(项目(二百三十四)+)|(((234)?|(二百三十四)?)项目(234)?)" '匹配字符模式
       '.Pattern = "(((" & "+)?)|(([一二三四五六七八九十]+)?))项目(([一二三四五六七八九十]+)?)|([0-9])?" '匹配字符模式
       .Pattern = "(项目(" & CChineseStr & ")+)|(((" & myStr & ")?|(" & CChineseStr & ")?)项目(" & myStr & ")?)" '匹配字符模式
      
       'Set mMatches = .Execute(Sheets("上报").Range("D21").Text) '执行正则查找,返回所有匹配结果的集合,若未找到,则为空
       
       Set mMatches = .Execute(file) '执行正则查找,返回所有匹配结果的集合,若未找到,则为空
       For Each mMatch In mMatches
       'SumValueInText = SumValueInText + CDbl(mMatch.Value)
       'SumValueInText = SumValueInText & mMatch.Value
       If mMatch.Value <> "" Then
       'fileNameArray = fileNameArray & mMatch.Value & "_"
       fso.copyfile basePath & "源文件" & mMatch.Value & ".*", basePath & "目标文件" & myStr '复制操作
       End If
       
      Next
      
      End With
      'MsgBox fileNameArray
     
      Set mRegExp = Nothing
      Set mMatches = Nothing
     
     Next
     Set fso = Nothing
     Set folder = Nothing
     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     '遍历路径下的文件End
     ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     MsgBox "操作完成"
    
    End Sub
    '将阿拉伯数字转为汉字
    Private Function CChinese(StrEng As String) As String
    '验证数据
    If Not IsNumeric(StrEng) Then
    If Trim(StrEng) <> “” Then MsgBox “无效的数字”
    CChinese = “”
    Exit Function
    End If
    '定义变量
    Dim intLen As Integer, intCounter As Integer
    Dim strCh As String, strTempCh As String
    Dim strSeqCh1 As String, strSeqCh2 As String
    Dim strEng2Ch As String
    'strEng2Ch = “零壹贰叁肆伍陆柒捌玖”
    strEng2Ch = “零一二三四五六七八九十”
    'strSeqCh1 = " 拾佰仟 拾佰仟 拾佰仟 拾佰仟"
    strSeqCh1 = " 十百千 十百千 十百千 十百千"
    strSeqCh2 = " 万亿兆"
    '转换为表示数值的字符串
    StrEng = CStr(CDec(StrEng))
    '记录数字的长度
    intLen = Len(StrEng)
    '转换为汉字
    For intCounter = 1 To intLen
    '返回数字对应的汉字
    strTempCh = Mid(strEng2Ch, Mid(StrEng, intCounter, 1) + 1, 1)
    '若某位是零
    If strTempCh = “零” And intLen <> 1 Then
    '若后一个也是零,或零出现在倒数第1、5、9、13等位,则不显示汉字“零”
    If Mid(StrEng, intCounter + 1, 1) = “0” Or (intLen - intCounter + 1) Mod 4 = 1 Then strTempCh = “”
    Else
    strTempCh = strTempCh & Trim(Mid(strSeqCh1, intLen - intCounter + 1, 1))
    End If
    '对于出现在倒数第1、5、9、13等位的数字
    If (intLen - intCounter + 1) Mod 4 = 1 Then
    
    '添加位" 万亿兆"
    strTempCh = strTempCh & Trim(Mid(strSeqCh2, (intLen - intCounter)  4 + 1, 1))
    End If
    '组成汉字表达式
    strCh = strCh & Trim(strTempCh)
    Next
    CChinese = strCh
    End Function

    补充:下面看下用VB实现重命名、拷贝文件夹及文件

    Private Sub commandButton1_Click()
    
    '声明文件夹名和路径
    Dim FileName, Path As String, EmptySheet As String
    'Path = “D:上报”
    Path = InputBox(“请输入” & Chr(34) & “成绩” & Chr(34) & “文件夹的路径,格式如” & Chr(34) & “D:成绩” & Chr(34))
    FileName = Path & “上学期”
    EmptySheet = Path & “学期初始化”
    'MsgBox FileName
    If Dir(FileName, vbDirectory) <> “” Then
    'MsgBox “文件夹存在”
    '获取系统当前时间
    'Dim dd As Date
    'dd = Now
    'MsgBox Format(dd, “yyyymm”)
    Dim myTime As String
    myTime = InputBox(“请输入当前时间,格式如” & Chr(34) & “201811” & Chr(34))
    If myTime = “” Then
    MsgBox “当前时间不能为空!否则不能重命名当期文件夹”
    Else:
    Name FileName As Path & “” & myTime
    End If
    End If
    '判断文件夹是否存在
    If Dir(FileName, vbDirectory) = “” Then
    '创建文件夹
    MkDir (FileName)
    'MsgBox (“创建完毕”)
    Else: MsgBox (“文件夹已在”)
    End If
    '复制空表到当期
    Set Fso = CreateObject(“Scripting.FileSystemObject”)
    '拷贝文件夹
    Fso.copyfolder EmptySheet, FileName
    'Fso.copyfile EmptySheet&“c:*.*”, “d:” '拷贝文件
    'FileSystemObject.copyfolder EmptySheet, FileName, 1
    MsgBox (“操作成功!”)
    End Sub

    总结

    以上两个示例分别解决了文件按规则复制、文件夹重命名与拷贝的常见需求。代码结构清晰,关键点在于正则表达式的构建和FSO对象的灵活使用,实际开发中可以直接套用或微调。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    VB中判断空的几种方法(Null, Missing, Empty, Nothing, vbNullString)
    VB中判断空的几种方法(Null, Missing, Empty, Nothing, vbNullString)

    VB6 里有几个特别容易让人迷糊的“特殊值”——Null、Missing、Empty、Nothing、vbNullString。除了最后一个,其他几个都不能直接用 a = 值 这种方式来判断。下面咱们逐个拆解,理清楚它们到底是怎么回事。 1、Null Null 代表“空值”,本质上是一个不合法的数据

    Windows 10 x64 安装 Visual Basic 6.0 SP6注意事项
    Windows 10 x64 安装 Visual Basic 6.0 SP6注意事项

    在Windows 10 x64上安装Visual Basic 6.0 SP6,绝对是个让人头疼的活儿。折腾了两天才搞定,把遇到的坑和解决方法整理出来,希望能帮到正在挣扎的朋友。 先说几个前置条件:Windows 7 x64和Windows 8 x64理论上都能装,不过下面这些经验主要基于Win10

    VB中使用WMI获取系统硬件和软件有关信息
    VB中使用WMI获取系统硬件和软件有关信息

    WMI是Windows管理接口,支持本地及远程获取软硬件信息。VB中需引用MicrosoftWMIScriptingV1.1库,通过Win32_类如SoundDevice、VideoController等查询声卡、显卡、内存及操作系统详情。该技术广泛用于系统监控与配置。

    VB FileSystemObject对象实例详解
    VB FileSystemObject对象实例详解

    FileSystemObject是ASP开发中操作服务器文件系统的核心对象,提供Drives属性及二十多种方法,可创建、读取、修改、删除文件和文件夹,并支持驱动器、路径处理及文件对象属性与方法的调用,功能全面且易于使用。

    VB关机恶搞小程序
    VB关机恶搞小程序

    基于VB的恶搞关机小程序利用系统命令或API触发强制关机,并通过注册表或启动文件夹实现自启动。交互版添加对话框要求输入“我是猪”取消关机,同时拦截关闭事件进行自我保护。核心涉及关机触发与自启动机制。

    VB实现的《QQ美女找茬游戏》实例
    VB实现的《QQ美女找茬游戏》实例

    一个基于VB的自动找茬程序,通过API截取屏幕两幅图片,逐像素对比其RGB分量,差值超过30时标记为差异点,并在窗体上绘制结果。程序将窗口设为总在最前,点击触发分析,实现快速自动找茬。

    VB实现按行读取文本文件的方法
    VB实现按行读取文本文件的方法

    VB中使用LineInput语句与FreeFile函数逐行读取文本文件,避免一次性加载大文件造成内存溢出。每行读取后可进行拼接、解析等处理,操作完毕必须关闭文件以释放系统资源。

    VB键盘鼠标无动作调用程序的尝试
    VB键盘鼠标无动作调用程序的尝试

    实现键盘鼠标无动作时调用程序,曾尝试HOOK钩子与Windows屏保检测均失败。最终用GetLastInputInfo函数获取系统空闲时间,成功触发操作,例如空闲15分钟弹出关机提示。

    VB实现禁用任务管理器的方法
    VB实现禁用任务管理器的方法

    在WindowsXP系统中,通过二进制流占用任务管理器可执行文件即可禁用任务管理器,使其无法被用户启动;而在Vista及Windows7系统中,则需要改用任务终止命令强制结束进程,并将该命令置于定时器事件中循环执行,从而持续阻止任务管理器重新启动,最终实现对任务管理器的长期禁用。这一方法通过占用文件。

    VB简单实现防止文件被改写
    VB简单实现防止文件被改写

    在VB程序中,防止配置文件被改写的有效方法是在程序运行期间先打开文件并保持占用状态,使系统提示文件被占用而无法手动修改。同时,程序启动时检查文件是否存在,若不存在则自动创建并写入默认值。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。