[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 求BAT脚本批量处理多个文件,分拣成多个文件夹

求BAT脚本批量处理多个文件,分拣成多个文件夹

用途:我想整理一些有声小说,一个文件夹里有1000-3000集的小说,想把文件夹里的小说分成多个文件夹,每个文件夹里500个音频,比如(0001-0500)(0501-1000)(1001-1500)

需要按顺序分文件夹,就是第1集和第500集必须在一个文件夹里。生成的文件夹最好带标号,如(0001-0499)(0500-0999)(1000-1499)这样的格式

求大神帮忙写个代码,本人小白一个,只能求助各位大神了

最好是把脚本放进去,双击直接运行的那种,先谢谢了。

本帖最后由 terse 于 2023-4-3 12:55 编辑

回复 23# 77七
重新翻看一下帖子
楼主的意思应该是按文件名MOVE到对应的文件夹  那样的话就开始就错了

TOP

回复 21# terse

大佬,我试了两段代码,第一个文件夹0001-0499都是移动了500个文件进去
bat小白,请多指教!谢谢!

TOP

本帖最后由 qixiaobin0715 于 2023-4-3 10:29 编辑

18楼写的匆忙,错误较多。结合本帖中各位大佬的思路,简化18楼的代码:
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /a-d *.mp3 *.m4v^|find /v /c ""') do set m=%%i
  3. set /a m1=100,m2=104
  4. set /a m+=10000
  5. setlocal enabledelayedexpansion
  6. for /l %%i in (10000,500,%m%) do (
  7.     set /a n1=%%i,n2=%%i+499
  8.     set Folder=!n1:~-4!-!n2:~-4!
  9.     md "!Folder!"
  10.     for /l %%j in (!m1!,1,!m2!) do (
  11.         set x=%%j
  12.         move "!x:~-2!*.mp3" "!Folder!">nul 2>nul
  13.         move "!x:~-2!*.m4v" "!Folder!">nul 2>nul
  14.     )
  15.     set /a m1=x+1,m2=m1+4
  16. )
  17. ren "!Folder!" "!Folder:~,5!!m:~1!(完)"
  18. ren "0000-0499" "0001-0499"
  19. pause
复制代码
bat另存为ANSI编码

TOP

本帖最后由 terse 于 2023-4-3 18:31 编辑

原来的代码理解错误。重写的是按文件名序号,移动到对应文件夹 不知结果是否符合
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b /a-d *.mp3 *.m4v^|find /v /c ""') do set /a n=%%i
  3. set /an+=10000,d=500,b=d-1
  4. if %n% gtr 10000 (
  5.    for /l %%i in (10000,!d!,!n!) do (
  6.         set /a "start=%%i,end=start+b,start+=^!(start-10000)"
  7.         if !end! geq !n! (
  8.            set old=!start:~-4!-!n:~-4!(完)
  9.         ) else  set old=!start:~-4!-!end:~-4!
  10.         set "_start=1!old:~,2!"
  11.         set "_end=1!old:~5,2!"
  12.         md "!old!" 2>nul
  13.         for /l %%j in  (!_start!,1,!_end!) do (
  14.              set s=%%j
  15.              move "!s:~1!*.mp3" "!old!" >nul 2>nul
  16.              move "!s:~1!*.m4v" "!old!" >nul 2>nul
  17.         )
  18.      )
  19. )
复制代码

TOP

回复 16# xp3000


    好了,这次可以了,完美。谢谢大佬

TOP

回复 17# 77七


    这个可以,谢谢了

TOP

本帖最后由 qixiaobin0715 于 2023-4-4 09:27 编辑

这样应当也行,写的较乱,未仔细审核和测试,只是提供另外一种思路:
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /a-d^|find /c ".mp3 .m4v"') do set m1=%%i
  3. set m2=0
  4. set m3=4
  5. setlocal enabledelayedexpansion
  6. for /l %%i in (499,500,%m1%) do (
  7.     set n=%%i
  8.     set /a n1=%%i-499
  9.     set n1=000!n1!
  10.     set n2=000%%i
  11.     if %%i equ 499 (
  12.         set Folder=0001-0499
  13.     ) else (
  14.         set Folder=!n1:~-4!-!n2:~-4!
  15.     )
  16.     md "!Folder!"
  17.     for /l %%j in (!m2!,1,!m3!) do (
  18.         set x=0%%j
  19.         set y=%%j
  20.         move "!x:~-2!??.mp3" "!Folder!"
  21.         move "!x:~-2!??.m4v" "!Folder!"
  22.     )
  23.     set /a m2=y+1
  24.     set /a m3=m2+4
  25. )
  26. if !m1! equ !n! (
  27.     set /a n+=1
  28.     set n1=000!n!
  29.     set n2=000!m1!
  30.     set Folder=!n1:~-4!-!n2:~-4!(完)
  31.     md "!Folder!"
  32.     move "*mp3" "!Folder!"
  33.     move "*m4v" "!Folder!"
  34. ) else (
  35.     ren "!Folder!" "!Folder!(完)"
  36. )
  37. pause
复制代码
后来发现上述代码未考虑周全,错误较多,不必测试了。

TOP

本帖最后由 77七 于 2023-4-1 23:02 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-d *.mp3 *.m4a ^| find /c /v ""') do set c=%%i
  4. for /l %%l in (0,500,3500) do (
  5.         set m=000%%l
  6.         set /a k=%%l+499
  7.         set n=000!k!
  8.         if !k! geq !c! (
  9.                 set l=000!c!
  10.                 set "folder=!m:~-4!-!l:~-4!(完)"
  11.         ) else (
  12.                 set "folder=!m:~-4!-!n:~-4!"
  13.         )
  14.         md "!folder!"
  15.         for /f "delims=" %%i in ('dir /b /a-d *.mp3 *.m4a') do (
  16.                 if "%%~ni" leq "!n:~-4!" (
  17.                         move "%%i" "!folder!" 1>nul
  18.                 )
  19.         )
  20.         if defined l (
  21.                 goto :next
  22.         )
  23. )
  24. :next
  25. ren "0000-0499" "0001-0499"
复制代码
bat小白,请多指教!谢谢!

TOP

回复 asy666
在原帖子上改了,你没改两行

TOP

回复  xp3000
第8、9行中的dir的用法好像有时会出现问题,如果文件夹中mp3、m4v这2种格式的文件都有,会先 ...
qixiaobin0715 发表于 2023-4-1 13:54
  1. @echo off
  2. REM 保存为ANSI编码的BAT
  3. set n=0
  4. set m=499
  5. set Folder=0001-0499
  6. md "%Folder%"
  7. setlocal enabledelayedexpansion
  8. for /f "tokens=1,* delims=:" %%a in ('dir /b /a-d /on^|findstr /n /e "\.mp3 \.m4a"^|findstr /n .') do set x=%%a&set xx=000%%a
  9. for /f "delims=" %%i in ('dir /b /a-d "*.mp3" "*.m4a"') do (
  10.     set /a n+=1
  11.     if !n! lss !m! (
  12.         move "%%i" "!Folder!\"
  13.     ) else (
  14.         move "%%i" "!Folder!\"
  15.         set /a m+=500
  16.         set /a n1=n+1
  17.         set /a n2=n+500
  18.         set n1=000!n1!
  19.         set n2=000!n2!
  20.         if !m! geq !x! (
  21. set Folder=!n1:~-4!-!xx:~-4!^(完^)
  22. ) else (
  23. set Folder=!n1:~-4!-!n2:~-4!
  24. )
  25.         md "!Folder!
  26.     )
  27. )
复制代码
我这样改了,还是会出现你说的问题。



这样的,MP3的 分拣到第一个文件夹了

TOP

回复 12# xp3000


    可以了,大佬,非常的感谢,这样节省我好多时间,大佬牛逼,同时也感谢楼上的几位大佬帮忙。

TOP

回复 12# xp3000
第8、9行中的dir的用法好像有时会出现问题,如果文件夹中mp3、m4v这2种格式的文件都有,会先显示mp3文件,后显示m4v文件,而不会按照文件名的顺序。第8行括号中的命令可以这样:
  1. dir /b /a-d /on^|findstr /n /e "\.mp3 \.m4v"
复制代码
第9行同样如此这般修改。

TOP

本帖最后由 xp3000 于 2023-4-1 22:42 编辑
  1. @echo off
  2. REM 保存为ANSI编码的BAT
  3. set n=0
  4. set m=499
  5. set Folder=0001-0499
  6. md "%Folder%"
  7. setlocal enabledelayedexpansion
  8. for /f "tokens=1,* delims=:" %%a in ('dir /b /a-d /on^|findstr /n /e "\.mp3 \.m4v"') do set x=%%a
  9. set xx=000%x%
  10. for /f "delims=" %%i in ('dir /b /a-d /on^|findstr /e "\.mp3 \.m4v"') do (
  11.     set /a n+=1
  12.     if !n! lss !m! (
  13.        move "%%i" "!Folder!\"
  14.     ) else (
  15.         move "%%i" "!Folder!\"
  16.         set /a m+=500
  17.         set /a n1=n+1
  18.         set /a n2=n+500
  19.         set n1=000!n1!
  20.         set n2=000!n2!
  21.         if !m! geq !x! (
  22. set Folder=!n1:~-4!-!xx:~-4!^(完^)
  23. ) else (
  24. set Folder=!n1:~-4!-!n2:~-4!
  25. )
  26.         md "!Folder!
  27.     )
  28. )
复制代码
3楼代码小改,刚开始拿700个文件测试遗漏了后面的
  1. @echo off
  2. REM 移动子文件夹文件到批处理文件夹
  3. for /f "delims=" %%a in ('dir /a:d /b') do (
  4. pushd "%%a"
  5. for /f "delims=" %%b in ('dir /b /a-d "*.*"') do (
  6. move "%~dp0%%a\%%~nxb" "%~dp0%%~nxb"
  7. )
  8. popd
  9. rd /s /q "%%a"
  10. )
复制代码

TOP

小改3楼代码
xp3000 发表于 2023-3-31 17:43



    这个分拣完 是这样的

是什么原因,还有就是音频里有其他格式的,比如 m4a 格式,要怎么添加进去,

大佬能帮我完善一下吗

TOP

返回列表