从文件名创建文件夹然后复制文件

时间:2015-11-10 12:46:21

标签: batch-file

这可能看起来像堆栈流中的常见问题,但它的运作方式有点不同。我得到了超过50万+并计算我需要排序的wav文件。所有文件都存储在一个目录中,文件名称如下:

OUT60105-20151109-161938-144XXXXXXX.70572.WAV

此文件是在20151109(录制日期)上对团队成​​员的分机60105(OUT60125)的呼叫生成的,并且来电者团队负责人名称为Boyly。

OUT60168-20151110-161850-144XXXXXXX.70570.WAV

此文件是根据20151110(记录日期)对团队成员的分机60168(OUT60168)的呼叫生成的,呼叫者组长是Girly。

依旧......

因此,根据上述信息,我想将所有这些文件排序到以下目录结构中:

F:\ Recordings \团队负责人姓名\团队成员的分机\录制日期

这就是我到目前为止所说的,我不知道接下来会做什么:

@echo off
setlocal enabledelayedexpansion
set FolderIncoming=F:\Incoming_Rec
set FileMask=OUT*.WAV
set FolderSorted=F:\Recordings\TeamLeader

for %%a in ("%FolderIncoming%\%FileMask%") do (

      Set FileName=%%~a


  for /f "tokens=1-2 delims=-" %%b in ("%%~nxa") do (                 

          if not exist "%FolderSorted%\%%e\%%b\%%~na.WAV" (
          if not exist "%FolderSorted%\%%e\%%b" md "%FolderSorted%\%%e\%%b"
          copy "%%a" "%FolderSorted%\%%e\%%b"
          )

       )
)

我该怎么做?请注意,我有几个团队领导,他们的团队也有几个成员(扩展)。

1 个答案:

答案 0 :(得分:0)

编辑仅复制数组中列出的扩展程序中的那些录制内容

@echo off
setlocal enabledelayedexpansion

rem Create the array of Team leader names
for %%a in ("161938=Boyly"
            "161850=Girly") do (
   for /F "tokens=1,2 delims==" %%b in (%%a) do (
      set "name[%%b]=%%c"
   )
)

set FolderIncoming=F:\Incoming_Rec
set FileMask=OUT*.WAV
set FolderSorted=F:\Recordings

for %%a in ("%FolderIncoming%\%FileMask%") do (

   for /f "tokens=1-3 delims=-" %%b in ("%%~NXa") do (

      set "leader=!name[%%d]!"

      rem Copy only those recordings from Extension listed in the array
      if defined leader (

         if not exist "%FolderSorted%\!leader!\%%b\%%c\%%~Na.WAV" (
            if not exist "%FolderSorted%\!leader!\%%b\%%c" md "%FolderSorted%\!leader!\%%b\%%c"
            copy "%%a" "%FolderSorted%\!leader!\%%b\%%c"
         )

      )

   )

)

您可以在this post的批处理文件中阅读有关阵列管理的更多详细信息。