Board logo

标题: [文本处理] 求助BAT脚本批量处理多个文件,分拣成多个文件夹 [打印本页]

作者: asy666    时间: 2022-9-12 12:49     标题: 求助BAT脚本批量处理多个文件,分拣成多个文件夹

如题

文件夹下有多个子文件夹,每个子文件夹下有1000-2000个文件,已音频为主。

效果

文件夹-子文件1(1600个音频)子文件2(2600个音频)

想直接把子文件下的音频分成每500个分成一个文件夹,生成的文件夹最好带标号,如(0001-0499)(0500-0999)(1000-1499)这样的格式

求大神帮忙写个代码,本人小白一个,只能求助各位大神了
作者: hfxiang    时间: 2022-9-12 18:39

本帖最后由 hfxiang 于 2022-9-13 08:13 编辑
  1. @echo off
  2. rem 保存为ANSI格式
  3. setlocal enableDelayedExpansion
  4. set "Source_Dir=D:\源文件夹"
  5. set "Target_Dir=D:\目标文件夹"
  6. set /a Fn=-1
  7. set /a Dst=100
  8. for /f "usebackq delims=" %%a in (`dir "%Source_Dir%" /a-d /s /b`) do (
  9. set /a Fn+=1
  10. set /a Dname1=!Fn!%%Dst
  11. set /a Dname2=Dname1*Dst
  12. if !Dname1! EQU !Dname2! (
  13. set /a Dname2=Fn+Dst-1
  14. set Dname1=0000!Fn!
  15. set Dname1=!Dname1:~-4!
  16. set Dname2=0000!Dname2!
  17. set Dname2=!Dname2:~-4!
  18. set Dname=!Dname1!-!Dname2!
  19. echo;mkdir "%Target_Dir%!Dname!"
  20. )
  21. set Fname=0000!Fn!
  22. set Fname=!Fname:~-4!
  23. echo;move "%%~fa" "%Target_Dir%\!Dname!\!Fname!%%~xa"
  24. )
  25. endlocal
  26. exit /b
复制代码

作者: asy666    时间: 2022-10-15 09:39

hfxiang 发表于 2022-9-12 18:39



    这个好像不行呀,或者是我不会用,我之前用的是这个,想改进一下


@echo off&setlocal enabledelayedexpansion
set m=1
(for %%a in (*) do (
    set/a "n+=1,1/(500*m-n+1)"||(set/am+=1)
    md !m!&move "%%a" .\!m!\
))2>nul
作者: hfxiang    时间: 2022-10-15 10:34

回复 3# asy666


    需要把19行及23行的“echo;”删除,俺测试时加上后,上传时忘记删除了
作者: hfxiang    时间: 2022-10-15 10:41

另外第7行的set /a Dst=100,需要修改为set /a Dst=500(也可以修改为你想要的任意文件个数)
作者: qixiaobin0715    时间: 2022-10-16 08:39

本帖最后由 qixiaobin0715 于 2022-10-17 09:43 编辑

将bat文件保存为ANSI编码,在主文件夹中运行:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /d %%i in (*) do (
  4.     pushd "%%i"
  5.     set /a m=0,n=0
  6.     for /f "delims=" %%j in ('dir /b /a-d') do (
  7.         set /a n+=1
  8.         if !m! lss !n! (
  9.             set /a m+=500
  10.             set NewFolder=!n!-!m!
  11.             md "!NewFolder!"
  12.         )
  13.         move "%%j" "!NewFolder!"
  14.     )
  15.     popd
  16. )
  17. pause
复制代码
第9行中的500,为分组数,可以根据需要自行修改。
未统一新建文件夹中的数字位数而使用的是自然数,若需要可使用2楼提供的有关代码修改。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2