Board logo

标题: [文件操作] 求文件随机分发批处理怎么写? [打印本页]

作者: qiqing    时间: 2019-4-6 13:50     标题: 求文件随机分发批处理怎么写?

例如,文件夹A里面有几万个文件,随机把这些文件,每600个移到新建文件夹1,2,3。。。。这些新建文件夹都建在A文件夹的目录里,一定随机抽取移动,不按照文件名,创建时间这些顺序来移动文件,

不知道我说的清楚不,怎么写呢?求教
作者: zaqmlp    时间: 2019-4-6 14:10

  1. @echo off
  2. set info=互助互利,支付宝扫码头像,感谢赞助
  3. rem 有问题,可加QQ956535081及时沟通
  4. title %info%
  5. start mshta VBScript:Execute("msgbox(""%info%""):close")
  6. cd /d "%~dp0"
  7. set "数量=600"
  8. powershell ^
  9.     $files=@(dir^|?{($_ -is [System.IO.FileInfo]) -and ($_.Name -ne '%~nx0')});^
  10.     $n=1;$list=get-random -input $files -count $files.length;^
  11.     for($i=0;$i -lt $list.length;$i++){^
  12.         if(-not (test-path -liter $n)){[void](md $n);};^
  13.         write-host ($list[$i].Name+' --^> '+$n);^
  14.         move -liter $list[$i].Name $n;^
  15.         if((($i+1) %% %数量%) -eq 0){$n++;};^
  16.     }
  17. pause
复制代码

作者: qiqing    时间: 2019-4-6 14:49

回复 2# zaqmlp


    非常感谢
作者: zaqmlp    时间: 2019-4-6 14:51

回复 3# qiqing

嗯,那就赞助下吧
作者: codegay    时间: 2019-4-6 20:06

nim语言版。
  1. import os, random, sequtils
  2. const
  3.     source = """D:\gayhub\test\测试a"""
  4.     target = """D:\gayhub\test\测试b"""
  5.     max = 600
  6. var dirs:seq[string] = @[]
  7. for k,p in walkDir(source):
  8.     if k == pcFile:
  9.         dirs.add(p)
  10. randomize()
  11. shuffle(dirs)
  12. var count = 0
  13. if dirs.len > max:
  14.     if dirs.len mod max > 0:
  15.         count = (dirs.len div max) + 1
  16.     else:
  17.         count = dirs.len div max
  18. else:
  19.     count = 1
  20. var dist = dirs.distribute(count, false)
  21. assert dist.len == count
  22. for i, p in dist:
  23.     var path =  target / $(i+1)
  24.     discard existsOrCreateDir(path)
  25.     for f in p:
  26.         moveFile(f,path/extractFilename(f))
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2