如何使用破折号获取文件名

时间:2013-10-31 16:00:36

标签: file vba

我希望你们都很好。请原谅我,如果我的问题是一个总的菜鸟,但我不能谷歌解决方案。

我需要获取文件名的一部分,并将文件分别移动到特定文件夹(Category)。问题是,我将有多个具有特定格式名称的JPEG文件,并由我的老板供应商提供给我。 这些文件包含汽车备件的图片,并以下列格式命名

代码 - 名称 - 类别 - 描述

我需要获得分类,我得到的唯一线索是分割代码,名称和类别的两个破折号。代码,名称和描述的长度和内容完全是随机的。

示例:

1099 - 球形接头 - 悬架 - 本田思域的球形接头,可重复使用本田雅阁.JPEG

3275 - 空气滤清器 - 机器 - 丰田卡罗拉空气滤清器,也可用于凯美瑞.JPEG

我需要的是获取“暂停”和“机器”并将每个文件移动到各自的文件夹。我不知道如何在两次破折后分割和获取数据。

任何回应都会非常感激。谢谢。祝你有美好的一天。

1 个答案:

答案 0 :(得分:0)

我使用相同的方法然后mehow,因为我已经计算出细节,我在这里给出:

Function entDirExists(ByVal strDir)
'
  Dim fso
'
  Set fso = CreateObject("Scripting.FileSystemObject")
  entDirExists = fso.FolderExists(strDir)
'
  Set fso = Nothing
End Function

'
'   i: counter
'   idxDir: index of the directory name in the split array
'
'   strFilename: current Filename
'   strSrcDir: source directory path
'   strDstDirPrefix: destination directory path prefix
'   strDstDir: destination directory for a category
'
'   xarr: split array of filename
'
Function entMoveFiles(ByVal strSrcDir)
'
  Dim i, idxDir
'
  Dim strFilename, strDstDirPrefix, strDstDir
  Dim xarr
'
  idxDir = 2
'
' strSrcDir = "D:\users\tmp"
'
  strDstDirPrefix = strSrcDir
'
' get the first image file:
'
  strFilename = Dir(strSrcDir & "\*.jpeg", vbNormal)
'
' loop over the source directory for images:
'
  i = 0
  Do While (strFilename <> "")
    '
    ' split filename:
    '
    xarr = Split(strFilename, "-")
    '
    ' get the destination directory full path like prefix\catetory:
    '
    strDstDir = xarr(idxDir)
    strDstDir = strDstDirPrefix & "\" & Trim(strDstDir)
    '
    ' create the destination directory if nonexistent:
    '
    If (Not entDirExists(strDstDir)) Then
      MkDir strDstDir
    End If
    '
    ' move the current file: [source path] as [destination path]
    '
    Name strSrcDir & "\" & strFilename As strDstDir & "\" & strFilename
    '
    ' get next file:
    '
    strFilename = Dir()
    i = i + 1
  Loop
'
  entMoveFiles = i
'
End Function

要处理目录名“D:\ myjpegs”,可以使用:

entMoveFiles "D:\myjpegs"

它将为每个类别创建子目录,例如暂停,D:\ myjpegs下的机器(如果它们尚不存在)。