RegEx 和 VB (Excel) 用于从文件名中提取日期

问题描述 投票:0回答:1

我尝试重命名“Joe BLOGGS_3052023.pdf”或“Joe BLOGGS_31052023.pdf”形式的一组 pdf 文件名(因此“FirstName SURNAME_dmmyy”或“FirstName SURNAME_ddmmyy”)失败。因此,如果日期是单个数字,则它比两位数字日期少一个字符。我需要文件名的输出为:

乔 BLOGGS_20230503.pdf 或乔 BLOGGS_20230531.pdf

我就是听不懂。我觉得我还是有一些问题!

任何人都可以帮助解决该模式,甚至是他们喜欢的完整代码吗?

干杯, 瓦兹

Sub test()
    Dim myDir As String
    myDir = "e:\Test\"
    If Dir(myDir, vbDirectory) = "" Then
        MsgBox "Folder not found"
        Exit Sub
    End If
    SeachFiles myDir, "*.pdf"
End Sub


Private Sub SeachFiles(myDir, fn)
Dim fso As Object, myFolder As Object, myFile As Object
Dim temp As String, m As Object, NewName As String, OldName As String
Set fso = CreateObject("Scripting.FileSystemObject")
With CreateObject("VBScript.RegExp")
    .Pattern = "(?:\D)(\d{1,2})(\d{1,2})(\d{4})(?:\D)"
    .ignorecase = True
    For Each myFile In fso.getfolder(myDir).Files
        If myFile.Name Like fn Then
            If .test(myFile.Name) Then
                If Not IsFileOpen(myDir & "\" & myFile.Name) Then
                    Set m = .Execute(myFile.Name)(0)
                    temp = Format$(DateValue(m.submatches(2) & "/" & _
                    m.submatches(0) & "/" & m.submatches(1)), "yyyymmdd")
                    NewName = myDir & "\" & Application.Replace(myFile.Name, _
                    m.firstindex + 2, m.Length - 1, temp)
                    OldName = myDir & "\" & myFile.Name
                    Name OldName As NewName
                Else
                    MsgBox "Can not process " & myFile.Name & _
                    vbLf & "Currently open"
                End If
            End If
        End If
    Next
    For Each myFolder In fso.getfolder(myDir).subfolders
        SeachFiles myFolder.Path, fn
    Next
End With
End Sub

Function IsFileOpen(fName As String) As Boolean
    Dim ff As Integer, errNum As Integer
    On Error Resume Next
    ff = FreeFile
    Open fName For Input Lock Read As #ff
    Close ff
    errNum = Err
    On Error GoTo 0
    IsFileOpen = (errNum <> 0)
End Function
excel regex vbscript
1个回答
0
投票

在提高您的 VBA 技能的同时,我可以暂时建议一下,该任务更适合像这样的批处理文件

@echo off

cd /d "e:\test"

SETLOCAL ENABLEDELAYEDEXPANSION

for %%f in (*.pdf) do (
set "$OldName=%%f"
set "$y=!$OldName:~-8,-4!"
set "test=!$OldName:~-12,-11!"
if !test!==_ (
set "$mmdd=0!$OldName:~-9,-8!!$OldName:~-11,-9!"
) else (
set "$mmdd=!$OldName:~-10,-8!!$OldName:~-12,-10!"
) 
echo ren "%%f" "!$OldName:~0,-12!_!$y!!$mmdd!.pdf"
)
cd /d %~dp0
© www.soinside.com 2019 - 2024. All rights reserved.