将文件一起分组到基于每个组创建的文件夹中

时间:2014-05-23 17:24:33

标签: windows batch-file cmd

我有16个文件要组合在一起,这样每个文件夹有3个文件(其余部分将放在一个单独的文件夹中)。本质上,文件有一个日期字符串,我想用它来分组文件。例如,201301是2013年1月。有没有办法创建批处理程序或执行以下操作:

1)创建与201301相同形式的所有字符串列表。这可以通过选择一个起点(在这种情况下为标题中的11个字符)开始计数,然后计数到5来完成。

like this符合条件的费用吗?

2)使用以下内容将这些字符串从最小到最大排序:

:startSort                            // Set our upper "array bound"
 set /a total=count-1

:RestartSort                          // Restart the sort from the beginning
 set /a count=1

:sortLoop
 set /a next=%count%+1                // Swap n and n+1
 call :swap %count% %next%
 set /a count=count+1
 if "%swapped%" == "true" goto :RestartSort // If the variables were swapped,
                                            // start again
 if "%count%" == "%total%" goto :output     // If we're done,
                                            // output the results
 goto :sortLoop                             // Back to the start to
                                            // swap the next two

3)数到3,然后创建一个文件夹,用于存储这三个文件

4)存储三个文件

5)继续,直到不再有文件

我对此设置的唯一问题是,当它到达没有其他文件要分组的最后一个文件时,它可能不知道该怎么做。有没有办法让它考虑到这一点 - 某种方式它知道它已经到了列表的末尾?

作为参考,文件名的格式为12345_ABCDE_20130101_20130101,文件夹名称与201301-201303类似(使用相同的示例值)。

1 个答案:

答案 0 :(得分:0)

代码示例:

@ECHO OFF &SETLOCAL disableDelayedExpansion
SET /a Counter=0
SET /a FilesPerFolder=3
FOR /f "delims=" %%a IN ('DIR /b /a-d /on "%cd%\test\*"') DO (
    SET /a Test=Counter%%FilesPerFolder
    SET /a TargetFolder=Counter/FilesPerFolder
    SETLOCAL enableDelayedExpansion
    MD "%cd%\test\Folder!TargetFolder!" 2>nul
    MOVE "%cd%\test\%%~a" "%cd%\test\Folder!TargetFolder!" >nul
    ENDLOCAL
    SET /a Counter+=1
)