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

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

[复制链接]
发表于 2022-5-7 21:10:21 | 显示全部楼层 |阅读模式
两者都是三层结构
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. )
复制代码
题主的意思是 随机取一组随机放 到 另外的一个文件夹中    我的理解是随机取就够了  
现实场景是 数据造假 利用现有的 数据在放到另外的一个中去
 楼主| 发表于 2022-5-7 21:26:14 | 显示全部楼层
这代码 有问题 大体实现了  不想调试了 太恶心了 这调试一个空格 一个符号不对 都不行 也没有提示
我的思路是
一.造一个路径表
1.列出 A的目录结构(含子目录)   在最底层的目录中
        遍历 所有文件 并 写成一个 这样的记录       序号$文件1path$文件2path>>list.txt
2.遍历 目标目录 在最底层目录中
        在次 生成随机数  与 list.txt 的第一个序号 匹配 提取数据
3.cpoy
   这里的问题是:    我有一条这样的记录 4$___                             (_______)是空
   就是说 A 的最底层没有文件
   在使用 copy 时  复制的次数 都没成功的话   遍历 目标的某个 最底层 将不会 被复制过去 因为数据源都没文件  
   我的想法时 不进行 下次循环  在执行一次 循环体  
  但是 标签 在for 内部 设的不知道是否合理  所以 最后一这问题没解决
求在我的思路上解决  源为空  再次随机cpoy   的具体代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 00:54 , Processed in 0.015213 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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