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

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

[复制链接]
发表于 2022-9-12 12:49:38 | 显示全部楼层 |阅读模式
如题

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

效果

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

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

求大神帮忙写个代码,本人小白一个,只能求助各位大神了
发表于 2022-9-12 18:39:54 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2022-10-15 09:39:59 | 显示全部楼层
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
发表于 2022-10-15 10:34:58 | 显示全部楼层
回复 3# asy666


    需要把19行及23行的“echo;”删除,俺测试时加上后,上传时忘记删除了
发表于 2022-10-15 10:41:22 | 显示全部楼层
另外第7行的set /a Dst=100,需要修改为set /a Dst=500(也可以修改为你想要的任意文件个数)
发表于 2022-10-16 08:39:50 | 显示全部楼层
本帖最后由 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楼提供的有关代码修改。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 15:29 , Processed in 0.073908 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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