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 PMSilver_421_export.txtClockings2mis04062009022511PM.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

まず、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 に答える
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 に答える