我有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类似(使用相同的示例值)。
答案 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
)