1

我正在使用 VB6,并且我有一个文件夹,其中有n许多文件。

我想将文件扩展名更改为.txt. 我使用下面的代码将所有.fin文件的扩展名更改为.txt.

Dim filename1 As String
filename1 = Dir$(txtsourcedatabasefile & "\*.fin", vbDirectory)
Do While filename1 <> ""
    Dim strInput As String
    Dim strOutput As String
    Dim strChar As String
    Dim intChar As Integer
    Dim intLoop As Integer
    strInput = filename1
    strOutput = ""
    For intLoop = 1 To Len(strInput)
        strChar = Mid$(strInput, intLoop, 1)
        intChar = Asc(strChar)
        If ((intChar >= 48) And (intChar <= 57)) Or _
            ((intChar >= 65) And (intChar <= 90)) Or _
            ((intChar >= 97) And (intChar <= 122)) Or _
            (intChar = 95) Then

            strOutput = strOutput & strChar
        End If
    Next
    Name txtsourcedatabasefile & "\" & filename1 As txtsourcedatabasefile & "\" & strOutput & ".txt"
    filename1 = Dir$
Loop

上面的代码用于更改.fin.txt,但没有任何扩展名的文件名,如Clockings2.mis04062009 022511 PM,Silver_421_export等,不会转换为.txt扩展名。例如,Clockings2mis04062009022511PM.txtSilver_421_export.txt

我应该如何更改此代码?

4

3 回答 3

3

如果我正确解释了您的问题,您希望遍历目录中的文件并将所有扩展名为“.fin”或根本没有扩展名的文件更改为“.txt”。您可以添加对 Microsoft Scripting Runtime 的引用,并使用 FileSystemObject 轻松完成此操作。在此示例中,我们假设txtsourcedatabase包含您要处理的目录:

Dim fso As New FileSystemObject
Dim fil As Variant

For Each fil In fso.GetFolder(txtsourcedatabase).Files
  If (LCase$(fso.GetExtensionName(fil.Name)) = "fin") Or _
      (fso.GetExtensionName(fil.Name) = vbNullString) Then
    fso.MoveFile fil.Path, fso.BuildPath(fso.GetParentFolderName(fil.Path), _
      fso.GetBaseName(fil.Path) & ".txt")
  End If
Next
于 2009-11-15T18:09:48.767 回答
0

好的,有几件事。这并不能真正解决您的问题,但您知道,您尝试做的一些事情可以从命令提示符 (ren *.fin *.txt) 完成。显然,这并不能解决没有扩展名的文件的问题。
其次,您甚至不应该基于使用 *.fin 调用 Dir 命令来获取没有扩展名的文件。
第三,假设您的标准是重命名所有以 .fin 结尾或没有扩展名 .txt 的文件...这应该有效:

Private Const txtsourcedatabasefile As String = "C:\test\"
Public Sub Example()
    Dim filename1 As String
    Dim strOutput As String
    filename1 = Dir$(txtsourcedatabasefile & "*")
    Do While LenB(filename1)
        strOutput = filename1
        If InStrB(1, strOutput, ".", vbBinaryCompare) = 0& Then
            strOutput = strOutput & ".txt"
            Name txtsourcedatabasefile & filename1 As txtsourcedatabasefile & strOutput
        ElseIf LCase$(Right$(filename1, 4)) = ".fin" Then
            Mid$(strOutput, Len(filename1) - 2) = "txt"
            Name txtsourcedatabasefile & filename1 As txtsourcedatabasefile & strOutput
        Else
            Debug.Print "Skipped:", strOutput
        End If
        filename1 = Dir$
    Loop
End Sub
于 2009-11-16T17:12:42.167 回答
0

首先,我认为您想将 Dir$ 属性从 vbDirectory 更改为 vbNormal。其次,我认为您应该简化重命名代码。你可以使用内置的 VB 函数Replace来做你想做的事。

Dim filename1 As String

filename1 = Dir$(txtsourcedatabasefile & "\*.fin", vbNormal)

Do While Len(filename1) > 0
   Name txtsourcedatabasefile & "\" & filename1 As txtsourcedatabasefile & "\" & _
       Replace(filename1, ".fin", ".txt", Len(txtsourcedatabasefile & "\" & filename1) - 4, 1, vbTextCompare)
   filename1 = Dir$
Loop
于 2009-11-18T13:51:14.453 回答