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

[文件操作] 批处理如何随机取一组文件 放到别的文件夹中?

两者都是三层结构
A(b1 ..  b8 ( c1 ...c31
                 d1 ...c31
                     ....
Y(b1 ..  b8 ( c1 ...c31
                 d1 ...c31
                     ....

要求把c1 中的全部文件复制  到  Y-b8 - d1 中取
      其中 要求随机 从A 中选取 尽量 保证 Y-----d 中的连续
      Y的最下层 全部填满
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set count1=
  4. set skp1=
  5. rem 2 for
  6. set skp2=
  7. set /a randNum=
  8. for /f %%i in ( 'dir /ad /s /b E:\补充资料\剪切实验' ) do (
  9. set /a count1=count1+1
  10. )
  11. for /f %%i in ( 'dir /ad /b E:\补充资料\剪切实验' ) do (
  12. set /a skp1=skp1+1
  13. )
  14. rem 获得随机的范围
  15. set /a randNum=count1-skp1
  16. for /f %%i in ( 'dir /ad /b E:\补充资料\2022' ) do (
  17. set /a skp2=skp2+1
  18. )
  19. rem 处理数据源
  20. set /a num=0
  21. for /f "skip=%skp1% " %%a in ( 'dir /ad /s /b E:\补充资料\剪切实验' ) do (
  22. set /a num=num+1
  23. set path1=
  24. dir /a-d /s /b %%a>nul 2>nul
  25. if errorlevel 1 (
  26. echo !num!$!path1!>>list.txt
  27. ) else (
  28. for /f %%i in ( 'dir /a-d /s /b %%a' ) do (
  29. set path1=!path1!$%%~dpnxi
  30. )
  31. echo !num!!path1!>>list.txt
  32. )
  33. )
  34. rem 复制
  35. for /f "skip=%skp2% " %%a in ( 'dir /ad /s /b E:\补充资料\2022' ) do (
  36. :again
  37. set bpath1=
  38. set bpath2=
  39. set count=0
  40. set /a randNum=!random!%%%randNum%+1
  41. echo !randNum!
  42. for /f "tokens=1,2,3 delims=$" %%i in ( list.txt ) do (
  43. if !randNum! == %%i (
  44. set bpath1=%%j
  45. set bpath2=%%k
  46. )
  47. )
  48. echo !bpath1!---^>%%a
  49. if defined bpath1 ( copy !bpath1! %%a ) else ( set /a count=count+1 )
  50. echo !bpath2!---^>%%a
  51. if defined bpath2 ( copy !bpath2! %%a ) else ( set /a count=count+1 )
  52. if !count! == 2 goto again
  53. )
复制代码
题主的意思是 随机取一组随机放 到 另外的一个文件夹中    我的理解是随机取就够了  
现实场景是 数据造假 利用现有的 数据在放到另外的一个中去

这代码 有问题 大体实现了  不想调试了 太恶心了 这调试一个空格 一个符号不对 都不行 也没有提示
我的思路是
一.造一个路径表
1.列出 A的目录结构(含子目录)   在最底层的目录中
        遍历 所有文件 并 写成一个 这样的记录       序号$文件1path$文件2path>>list.txt
2.遍历 目标目录 在最底层目录中
        在次 生成随机数  与 list.txt 的第一个序号 匹配 提取数据
3.cpoy
   这里的问题是:    我有一条这样的记录 4$___                             (_______)是空
   就是说 A 的最底层没有文件
   在使用 copy 时  复制的次数 都没成功的话   遍历 目标的某个 最底层 将不会 被复制过去 因为数据源都没文件  
   我的想法时 不进行 下次循环  在执行一次 循环体  
  但是 标签 在for 内部 设的不知道是否合理  所以 最后一这问题没解决
求在我的思路上解决  源为空  再次随机cpoy   的具体代码

TOP

返回列表