找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 67671|回复: 23

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

[复制链接]
发表于 2023-3-30 02:01:23 | 显示全部楼层 |阅读模式
求BAT脚本批量处理多个文件,分拣成多个文件夹

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

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

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

最好是把脚本放进去,双击直接运行的那种,先谢谢了。
发表于 2023-3-30 08:17:46 | 显示全部楼层
回复 1# asy666


请截图发出来看看现在的真实文件名是怎样的?

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
发表于 2023-3-30 08:48:10 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2023-3-30 09:31 编辑

假设有声小说是mp3格式,看看这样有无问题,bat保存为ANSI编码:
  1. @echo off
  2. set m=500
  3. set Folder=0001-0500
  4. md "%Folder%"
  5. setlocal enabledelayedexpansion
  6. for /f "delims=" %%i in ('dir /b /a-d *.mp3') do (
  7.     set /a n+=1
  8.     if !n! lss !m! (
  9.         move "%%i" "!Folder!"
  10.     ) else (
  11.         move "%%i" "!Folder!"
  12.         set /a m+=500
  13.         set /a n1=n+1
  14.         set /a n2=n+500
  15.         set n1=000!n1!
  16.         set n2=000!n2!
  17.         set Folder=!n1:~-4!-!n2:~-4!
  18.         md "!Folder!
  19.     )
  20. )
  21. pause
复制代码
 楼主| 发表于 2023-3-30 20:23:44 | 显示全部楼层
回复 2# Batcher

原文件




想要的效果
 楼主| 发表于 2023-3-30 20:28:09 | 显示全部楼层
本帖最后由 asy666 于 2023-3-30 20:30 编辑
假设有声小说是mp3格式,看看这样有无问题,bat保存为ANSI编码:
qixiaobin0715 发表于 2023-3-30 08:48



是这样的大佬,如果我想把文件夹分成(0001-0499)(0500-0999)(1000-1499)(1500-1999)这样的排序 应该怎么改,能帮我改一下吗。

还有 分拣完能比能直接自动关闭,不需要按任意键关闭
发表于 2023-3-30 22:29:09 | 显示全部楼层
  1. set /a group=500
  2. setlocal enabledelayedexpansion
  3. cd /d "%~dp0"
  4. for /f "delims=" %%i in ('dir /b /a-d *.mp3') do (
  5.       set /a n+=1
  6.       if !n! equ 1 (set "b=%%~ni")
  7.       xcopy "%%i" "!b!"
  8.       if !n! equ %group% (
  9.             ren "!b!" "!b!-%%~ni"
  10.             set /a n=0
  11.             )
  12. set "last=%%~ni"
  13. )
  14. ren "!b!" "!b!-%last%"
复制代码
 楼主| 发表于 2023-3-31 01:00:51 | 显示全部楼层
回复 7# buyiyang


    对就是这个效果,这个能计算出最后到多少集吗?比如一共1890个音频。最后一个文件夹输出(1500-1890(完))这个的格式
发表于 2023-3-31 01:00:52 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. set md=500
  3. for /f "delims=" %%i in ('dir /b /a-d *.mp3') do (
  4.      set /a "i=100%%~ni%%10000/md,n=10000+i*500+^!i,m=n+499-^!i"
  5.      set "fd=!n:~1!-!m:~1!"
  6.      md !fd! 2>nul
  7.      move %%i  !fd!
  8. )
  9. pause
复制代码
发表于 2023-3-31 13:54:00 | 显示全部楼层
  1. setlocal enabledelayedexpansion
  2. cd /d "%~dp0"
  3. set /a group=500
  4. for /f "delims=" %%i in ('dir /b /a-d *.mp3') do (
  5.       for /f "tokens=* delims=0" %%a in ("%%~ni") do (
  6.             set /a n=%%a%%%group%
  7.             if !n! equ 1 (set "b=%%~ni")
  8.             xcopy "%%i" "!b!"
  9.             if !n! equ 0 (ren "!b!" "!b!-%%~ni")
  10.             )
  11.        set "last=%%~ni"
  12. )
  13. ren "!b!" "!b!-%last%(完)"
复制代码
 楼主| 发表于 2023-3-31 15:27:40 | 显示全部楼层
buyiyang 发表于 2023-3-31 13:54



    这个是可以的,但是 是复制的那种,分拣好以后,源文件还在那里,还是感谢大佬帮助
 楼主| 发表于 2023-3-31 17:49:32 | 显示全部楼层
小改3楼代码
xp3000 发表于 2023-3-31 17:43



    这个分拣完 是这样的

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

大佬能帮我完善一下吗
发表于 2023-3-31 19:52:59 | 显示全部楼层
本帖最后由 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. )
复制代码
发表于 2023-4-1 13:54:09 | 显示全部楼层
回复 12# xp3000
第8、9行中的dir的用法好像有时会出现问题,如果文件夹中mp3、m4v这2种格式的文件都有,会先显示mp3文件,后显示m4v文件,而不会按照文件名的顺序。第8行括号中的命令可以这样:
  1. dir /b /a-d /on^|findstr /n /e "\.mp3 \.m4v"
复制代码
第9行同样如此这般修改。
 楼主| 发表于 2023-4-1 14:00:20 | 显示全部楼层
回复 12# xp3000


    可以了,大佬,非常的感谢,这样节省我好多时间,大佬牛逼,同时也感谢楼上的几位大佬帮忙。
 楼主| 发表于 2023-4-1 21:28:46 | 显示全部楼层
回复  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的 分拣到第一个文件夹了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 00:02 , Processed in 0.023158 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表