
【已解決】批處理如何通過文件名排序按20個文件作為一組轉移歸類到新的文件夾中一:需求背景:1.1、D:sql路徑下,有上千個以sql為后綴的文件,我期望把這些sql文件,按文件名以A-Z的順序排序,轉移歸類到D:sql_groups文件夾路徑下面新的文件夾中:1.2、比如第一次轉移20個文件作為一組,將這20個文件轉移到新的文件夾,并命名1-201.3、然后第二次轉移剩余的文件,也是20個文件作為一組,將這20個文件轉移到新的文件夾,并命名21-401.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
nclick="copycode($('code0'));">復制代碼
五:百度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命令用于在腳本執行完畢后暫停窗口,以便你可以查看任何可能的錯誤消息或確認結果。在生產環境中,你可能希望去掉這個命令或將其替換為日志記錄功能。