一:需求背景:
1.1、D:\sql路径下,有上千个以sql为后缀的文件,我期望把这些sql文件,按文件名以A-Z的顺序排序,转移归类到D:\sql_groups文件夹路径下面新的文件夹中:
1.2、比如第一次转移20个文件作为一组,将这20个文件转移到新的文件夹,并命名1-20
1.3、然后第二次转移剩余的文件,也是20个文件作为一组,将这20个文件转移到新的文件夹,并命名21-40
1.4、接着第三次转移剩余的文件,也是20个文件作为一组,将这20个文件转移到新的文件夹,并命名31-50
..........
1.5、直到遍历D:\sql路径下的所有文件全部转移到新的文件夹为止。
二:最后结果是:
2.1、D:\sql文件夹为空
2.2、D:\sql_groups文件夹路径下面有很多(1-20、21-40、41-60、61-80.....这样的文件夹)
三:发帖前的工作
3.1、有通过关键字搜过论坛中的相关帖子,没有找到相关的内容
3.2、有问过百度AI和讯飞星火,得出的脚本均无法执行
四:其中百度AI的bat脚本如下(运行报错:找不到文件,同时还把我D:\sql文件夹删掉了,幸好我提前备份):- @echo off
- setlocal enabledelayedexpansion
-
- set "sourceDir=D:\sql"
- set "destDir=D:\sql_groups"
- set /a "groupSize=20"
- set /a "groupNum=1"
- set /a "fileCount=0"
-
- if not exist "%destDir%" mkdir "%destDir%"
-
- for /f "delims=" %%f in ('dir /b /o-n "%sourceDir%*.sql"') do (
- set /a "fileCount+=1"
- set /a "groupEnd=!((fileCount-1) / %groupSize% + 1) * %groupSize%!"
- set "folderName=%destDir%\!groupNum!-!groupEnd!"
-
- if not exist "!folderName!" mkdir "!folderName!"
-
- move "%sourceDir%\%%f" "!folderName!\"
-
- if !fileCount! equ !groupEnd! (
- set /a "groupNum+=1"
- )
- )
-
- :: 清理空的源文件夹(可选)
- rd /s /q "%sourceDir%"
-
- echo.
- echo All files have been grouped and moved to folders.
- pause
复制代码 五:百度AI针对这段脚本的说明如下
5.1、这个脚本会按文件名从Z到A的顺序排序文件(因为dir /b /o-n命令默认按名称降序排序)。如果你需要按A到Z的顺序,只需去掉/o-n选项,因为dir /b默认就是按名称升序排序的。
5.2、脚本中groupEnd的计算方式是确定当前文件应该属于哪个组的结束编号。它通过将当前文件计数(减1)除以组大小,然后加1并乘以组大小来得到。这样,当文件计数是组大小的倍数时,groupEnd会恰好是下一个组的起始编号减1,但由于我们总是创建到groupEnd的文件夹(包括它本身),所以实际上这不会影响分组的结果。
5.3、脚本最后有一个可选的命令来清理空的源文件夹。这个命令是rd /s /q "%sourceDir%",它会删除%sourceDir%及其所有子目录和文件,且不会提示确认。请确保在运行此命令之前,你已经将所有需要的文件都移动到了新位置,并且这个源文件夹不再需要。如果你不想自动删除源文件夹,请注释掉或删除这一行。
5.4、请注意,如果D:\sql下有非.sql文件,它们将不会被处理。如果你还想处理其他类型的文件,可以调整dir /b /o-n "%sourceDir%*.sql"命令中的文件扩展名部分。
5.5、脚本中的pause命令用于在脚本执行完毕后暂停窗口,以便你可以查看任何可能的错误消息或确认结果。在生产环境中,你可能希望去掉这个命令或将其替换为日志记录功能。 |