【问题标题】:VBS or CMD file to move files into folders based on file name pattern matchingVBS 或 CMD 文件根据文件名模式匹配将文件移动到文件夹中
【发布时间】:2012-12-31 07:04:24
【问题描述】:

寻求指导...

我有一个目录,它定期接收名称包含以下信息的文件:

showname-episode-segment.mov

我正在寻找一种将这些文件移动到现有目录中的方法,该目录以文件名的 showname 部分命名。如果存在没有第一个连字符分隔符的文件,则应跳过该文件。如果引入了新节目并且相应的文件夹不存在,则会创建它。

感谢任何帮助

【问题讨论】:

    标签: vbscript cmd


    【解决方案1】:

    VBScript 可能是最简单的。这里有一些关于如何做你需要的一切的 sn-ps。

    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")
    ' create a new folder
    If Not fso.FolderExists(folderPath) Then
       Set newfolder = fso.CreateFolder(folderPath)
    End If
    ' move a file
    If fso.FileExists(filePathAndName) Then
       fso.MoveFile filePathAndName, folderPath
    End If
    ' check file name
    Set folder = fso.GetFolder(folderPath)
    Set files = folder.Files
    For each file In files
        If InStr(file.Name, "-") > 0 Then
            'the file name has a "-" in it
        End If
    Next
    

    【讨论】:

      【解决方案2】:

      一个简单的批处理文件就可以解决问题。定义要查找传入文件的位置以及要创建显示文件夹的位置。然后使用简单的 FOR 列出所有具有 *-*.mov 格式的传入文件。使用 FOR /F 解析节目名称(第一个 - 之前的文本)。如果 show 文件夹不存在,则创建它,然后移动该文件。

      @echo off
      setlocal
      set "incomingFolder=c:\video\incoming"
      set "showsFolder=c:\video\shows"
      
      for %%F in ("%incomingFolder%\*-*.mov") do (
        for /f "delims=-" %%A in ("%%~nF") do (
          if not exist "%showsFolder\%%A" md "%showsFolder%\%%A"
          move "%%F" "%showsFolder%\%%A"
        )
      )
      

      【讨论】: