0

私は現在これらのディレクトリを持っています:

C:\testfolder\100
C:\testfolder\101
C:\testfolder\102

そして私はこれらのファイルを同じディレクトリに持っています:

C:\testfolder\file-100.txt
C:\testfolder\file-101.txt
C:\testfolder\file-102.txt

私がVBでやろうとしていたのは、テキストファイルfile-100.txt100ディレクトリに移動することです。テキストファイルfile-101.txtについても同様に、関連するフォルダに移動します101

私の質問は、プログラムがテキストファイル名の文字列の一部と一致し、一致するフォルダ名に移動するようにループを作成するにはどうすればよいですか?これを適用するディレクトリとファイルが何百もあるので、一度に1つのファイルを移動するのは効率的ではありません。

編集:

私はVBにいくらか精通しています。私はこれの論理的な部分に問題を抱えていました。そこでは、ファイルを転送できるようにループを作成する方法を考えることができませんでした。

4

3 に答える 3

0

正規表現を使用して、一致するパターンを見つけることができます

    Dim dir As String = "C:\testfolder\"
    Dim fileList() As String = {"C:\testfolder\file-100.txt", _
                                "C:\testfolder\file-101.txt", _
                                "C:\testfolder\file-102.txt"}

    Dim pattern As New Regex(Replace(dir, "\", "\\") & "file-([0-9]+)[.]txt")

    For Each value As String In fileList
        Dim match As Match = pattern.Match(value)
        If match.Success Then
            MsgBox("move from " & dir & " to " & dir & match.Groups(1).Value)
        End If
    Next

RegularExpressionsをインポートしていることを確認してください。

Imports System.Text.RegularExpressions
于 2012-07-06T15:08:30.857 に答える
0

エラー チェックがなければ、これらのファイルを移動する単純なルーチンになります。ファイル名が一貫していることに基づいています。

Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
  Dim homePath As String = "c:\testfolder"

  Dim files() As String = Directory.GetFiles(homePath, "*.txt")
  For Each f As String In files
    Dim fileName As String = Path.GetFileName(f)

    Dim destPath As String = Path.GetFileNameWithoutExtension(fileName)
    destPath = destPath.Split("-")(1)
    destPath = Path.Combine(homePath, destPath)

    Dim destFile As String = Path.Combine(destPath, fileName)

    File.Move(f, destFile)
  Next
End Sub

これは、ディレクトリ内のテキスト ファイルのリストを取得し、ファイル名を解析して数値 (100、101 など) だけを取得し、新しいパスを再構築するだけです。ディレクトリも存在すると想定しています。

于 2012-07-06T15:01:54.253 に答える
0
Private Sub organizeFiles(ByVal folderPath As String)
    For Each filePath As String In Directory.GetFiles(folderPath, "*.txt")
        Dim destinationFilePath As String = getDestinationFilePath(filePath)
        If destinationFilePath IsNot Nothing Then
            File.Move(filePath, destinationFilePath)
        End If
    Next
End Sub

Private Function getDestinationFilePath(ByVal filePath As String) As String
    Const fileNamePrefix As String = "file-"
    Dim fileName As String = Path.GetFileName(filePath)
    Dim fileNameWithoutExtension As String = Path.GetFileNameWithoutExtension(filePath)
    If Not fileNameWithoutExtension.StartsWith(fileNamePrefix) Then
        Return Nothing
    End If
    Dim folderName As String = fileNameWithoutExtension.Substring(fileNamePrefix.Length)
    Dim fileFolderPath As String = Path.GetDirectoryName(filePath)
    Dim destinationFolderPath As String = Path.Combine(fileFolderPath, folderName)
    Dim destinationFilePath As String = Path.Combine(destinationFolderPath, fileName)
    Return destinationFilePath
End Function
于 2012-07-06T15:09:45.117 に答える