标题: [文件操作] 【已解决】批处理怎样将N个文件夹里的文件平分? [打印本页]
作者: liziyunabcd 时间: 2019-9-26 18:48 标题: 【已解决】批处理怎样将N个文件夹里的文件平分?
本帖最后由 liziyunabcd 于 2019-10-6 13:46 编辑
假如:
有五个文件夹(文件夹名分区为:1、2、3、4、5),每个文件夹里有N个文件(文件假如是.MP4,每个文件夹里的数量可能是几十到几万不等。)
现在需求一个BAT:点一下BAT后,这五个文件夹里的文件都平均分到每个文件夹。
然后每个文件夹里的文件就一样多(当然,可能文件不一定5的倍数,最后一点点分不平均也没事。)
求大神出手。
作者: hlzj88 时间: 2019-9-26 23:09
http://www.bathome.net/thread-26027-1-1.html
你参考
作者: xczxczxcz 时间: 2019-9-29 12:33
so easy 既然是平均分配,若没有因重名文件被替换(或改名),最终结果是最多与最少只差一个文件或0个文件。
作者: liziyunabcd 时间: 2019-10-5 21:16
回复 3# xczxczxcz 大哥,能整一个代码出来么,我小白一个
作者: Batcher 时间: 2019-10-5 21:24
回复 1# liziyunabcd
5个文件夹里面会不会存在同名文件?
作者: liziyunabcd 时间: 2019-10-5 21:54
回复 5# Batcher
不会存在同名的文件,哇,老大来了!!!
作者: liziyunabcd 时间: 2019-10-5 22:08
回复 5# Batcher
老大,我查了好久,都没找到这样的代码,这个问题是不是很刁钻?
作者: terse 时间: 2019-10-6 09:42
最直接的就是全部拿出来 然后再分回去
作者: Batcher 时间: 2019-10-6 10:41
回复 6# liziyunabcd
假设N个待处理的文件夹放在 C:\Test\待处理 目录下面
以下代码保存为 test.bat 放在 C:\Test 目录下面
执行代码之前注意做好文件备份- @echo off
- setlocal enabledelayedexpansion
- set "SourceFolder=C:\Test\待处理"
- set "StageFolder=C:\Test\临时中转"
- if not exist "%StageFolder%" (
- md "%StageFolder%"
- )
- for /f "delims=" %%i in ('dir /b /s /a-d "%SourceFolder%"') do (
- move /y "%%i" "%StageFolder%"
- )
- set FolderNum=0
- for /f "delims=" %%i in ('dir /b /ad "%SourceFolder%"') do (
- set /a FolderNum+=1
- set "_!FolderNum!=%SourceFolder%\%%i"
- )
- set FileIndex=0
- for %%i in ("%StageFolder%\*.*") do (
- set /a FileIndex+=1
- set /a FolderIndex=FileIndex%%FolderNum
- if !FolderIndex! neq 0 (
- call move /y "%%%%i" "%%_!FolderIndex!%%"
- ) else (
- call move /y "%%%%i" "%%_!FolderNum!%%"
- )
- )
复制代码
作者: liziyunabcd 时间: 2019-10-6 13:45
回复 9# Batcher
老大出手,太牛了,完美解决!!!
膜拜老大!!
作者: terse 时间: 2019-10-6 15:13
把文件名存放在变量里 不知道文件多时怎么样- @echo off & setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /b/ad') do (
- set /a_%%a=0,m+=1
- set files=!files! %%a
- for /f "delims=" %%b in ('dir /b/a-d "%%~fa\*.jpg"') do (
- set /a _%%a+=1
- set $%%a_!_%%a!=%%b
- )
- )
- for %%a in (!files!) do set/a n+=_%%a
- set /a p=n/m,q=n%%p
- for %%a in (!files!) do (
- if !q! gtr 0 (
- set /a q-=1,#p_%%a=p+1
- ) else set /a#p_%%a=p
- if !_%%a! lss !#p_%%a! (
- set files=!files: %%a=!
- set "$#=!$#!:%%a"
- ) else if !_%%a! equ !#p_%%a! set files=!files: %%a=!
- )
- if not "#!files: =!" == "#" for %%a in (!files!) do (
- set /a i=_%%a - #p_%%a
- for /l %%b in (1,1,!i!) do (
- for /f "delims=:" %%c in ("!$#!") do (
- if !_%%c! geq !#p_%%c! (
- set "$#=!$#:*%%c:=!"
- for /f "delims=:" %%c in ("!$#!") do set "f=%%c"
- ) else set "f=%%c"
- )
- for %%c in ("!f!") do (
- move "%%a\!$%%a_%%b!" "%%~c\"
- set /a _%%~c+=1
- )
- )
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |