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

[文件操作] 【已解决】批处理怎样将N个文件夹里的文件平分?

本帖最后由 liziyunabcd 于 2019-10-6 13:46 编辑

假如:

   有五个文件夹(文件夹名分区为:1、2、3、4、5),每个文件夹里有N个文件(文件假如是.MP4,每个文件夹里的数量可能是几十到几万不等。)

   现在需求一个BAT:点一下BAT后,这五个文件夹里的文件都平均分到每个文件夹。

  然后每个文件夹里的文件就一样多(当然,可能文件不一定5的倍数,最后一点点分不平均也没事。)

  求大神出手。

目的,学习批处理

TOP

so easy 既然是平均分配,若没有因重名文件被替换(或改名),最终结果是最多与最少只差一个文件或0个文件。
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

回复 3# xczxczxcz 大哥,能整一个代码出来么,我小白一个

TOP

回复 1# liziyunabcd


    5个文件夹里面会不会存在同名文件?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5# Batcher


    不会存在同名的文件,哇,老大来了!!!

TOP

回复 5# Batcher


    老大,我查了好久,都没找到这样的代码,这个问题是不是很刁钻?

TOP

最直接的就是全部拿出来 然后再分回去

TOP

回复 6# liziyunabcd


假设N个待处理的文件夹放在 C:\Test\待处理 目录下面
以下代码保存为 test.bat 放在 C:\Test 目录下面
执行代码之前注意做好文件备份
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "SourceFolder=C:\Test\待处理"
  4. set "StageFolder=C:\Test\临时中转"
  5. if not exist "%StageFolder%" (
  6.     md "%StageFolder%"
  7. )
  8. for /f "delims=" %%i in ('dir /b /s /a-d "%SourceFolder%"') do (
  9.     move /y "%%i" "%StageFolder%"
  10. )
  11. set FolderNum=0
  12. for /f "delims=" %%i in ('dir /b /ad "%SourceFolder%"') do (
  13.     set /a FolderNum+=1
  14.     set "_!FolderNum!=%SourceFolder%\%%i"
  15. )
  16. set FileIndex=0
  17. for %%i in ("%StageFolder%\*.*") do (
  18.     set /a FileIndex+=1
  19.     set /a FolderIndex=FileIndex%%FolderNum
  20.     if !FolderIndex! neq 0 (
  21.         call move /y "%%%%i" "%%_!FolderIndex!%%"
  22.     ) else (
  23.         call move /y "%%%%i" "%%_!FolderNum!%%"
  24.     )
  25. )
复制代码
1

评分人数

    • liziyunabcd: 完美解决我的技术难题,老大就是老大,一出 ...技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 9# Batcher


    老大出手,太牛了,完美解决!!!

   膜拜老大!!

TOP

把文件名存放在变量里 不知道文件多时怎么样
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /b/ad') do (
  3.      set /a_%%a=0,m+=1
  4.      set files=!files! %%a
  5.      for /f "delims=" %%b in ('dir /b/a-d "%%~fa\*.jpg"') do (
  6.           set /a _%%a+=1
  7.           set $%%a_!_%%a!=%%b
  8.      )
  9. )
  10. for %%a in (!files!) do set/a n+=_%%a
  11. set /a p=n/m,q=n%%p
  12. for %%a in (!files!) do (
  13.      if !q! gtr 0 (
  14.         set /a q-=1,#p_%%a=p+1
  15.      ) else set /a#p_%%a=p
  16.      if !_%%a!  lss !#p_%%a! (
  17.          set files=!files: %%a=!
  18.          set "$#=!$#!:%%a"
  19.      ) else  if !_%%a!  equ !#p_%%a!  set files=!files: %%a=!
  20. )
  21. if not "#!files: =!" == "#" for %%a in (!files!) do (
  22.      set /a i=_%%a - #p_%%a
  23.      for /l %%b in (1,1,!i!) do (
  24.           for /f "delims=:" %%c in ("!$#!") do (
  25.                if  !_%%c! geq !#p_%%c! (
  26.                    set "$#=!$#:*%%c:=!"
  27.                    for /f "delims=:" %%c in ("!$#!") do set "f=%%c"
  28.               ) else set "f=%%c"
  29.           )
  30.           for %%c in ("!f!") do  (
  31.                move "%%a\!$%%a_%%b!"   "%%~c\"
  32.                set /a _%%~c+=1
  33.           )
  34.      )
  35. )
  36. pause
复制代码

TOP

返回列表