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

[文本处理] 如何将一个文件夹里的多个文件按指定数量依次移动到另一个文件夹里的多个子文件夹里

本帖最后由 pcl_test 于 2016-11-12 10:06 编辑

描述一:A文件夹 和 B文件夹处于同一级.
A文件夹下有几千个文件, B文件夹下有M个子文件夹(子文件夹可能是空文件夹也可能不是空的)
怎样每次从A文件夹下提取1个文件到B文件夹下的一个子文件夹中,直到提取M次,每个文件夹中都提取到一个文件,完成一轮。

共提取N轮,实现M个子文件夹中都被提取进N个不同的文件.  提取前,手动输入N的值。

并不是一次提取N个,而是N次提取,每次提取一个。

------------------------------------------------------------------------------------------------------------------------------
举例: A文件夹中保证有足够的文件数.
若N值取3, 则
第一次从A文件夹中提取1个文件到B中的任一个子文件夹中,然后删除被提取过的这个文件.
第二次从A文件夹中提取1个文件到另一个子文件夹中,然后删除被提取过的这个文件.
........
第M次从A文件夹中提取1个文件到另一个子文件夹中,然后删除被提取过的这个文件.
至此完成一轮。然后开始第二轮提取,直到N轮完成。
------------------------------------------------------------------------------------------------------------------------------





描述二:我换个描述,最终的效果类似:从A文件夹中随机剪切N个文件到B文件夹的任一子文件夹中,直到每个子文件夹都被剪切到N个文件.

即,
第一次从A中剪切N个文件到B中的任一子文件夹,
第二次从A中剪切N个文件到B中的另一子文件夹,
直到每个子文件夹都被剪切到N个文件

A中文件数保证有足够文件数.



实现任一描述效果均可,两者效果差不多,都能实现一定随机效果。第一种描述是规律性随机 第二种描述是无序性随机。

tmplinshi 斑竹曾给我写了一个不随机的,如果能加上随机就是第二种描述了。大家参考,贴子见 http://www.bathome.net/thread-13428-1-1.html

谢谢大家。

本帖最后由 jellyhk 于 2011-12-15 10:40 编辑

不理解!
是从A文件夹下提取任意一个文件到b任意一个文件夹
第2次的时候是不是就不能提取文件到上面那个文件夹了?是不是说每个文件夹都要从A下提取一个文件过来!
----------另外文件是一样的吗?都是txt或其他?
---------A文件夹是固定叫A吗?B文件夹是叫B么》?
本人已死!不用联系!~
要联系下来联系!~~

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /ad /b /s B\*') do (
  4. set /a a+=1
  5. set !a!=%%a
  6. echo !a!=%%a
  7. )
  8. set /p n=请输入
  9. set /a aa=!n!*!a!
  10. for /f "delims=" %%a in ('dir /a-d /b /s A *.*') do (
  11. set /a b+=1
  12. set /a c+=1
  13. if "!c!" gtr "!a!" set c=1
  14. call :a "%%a"
  15. if "!b!"=="!aa!" pause&exit
  16. )
  17. :a
  18. move %1 "!%c:"=%!"
  19. goto :eof
复制代码
不知道这样子行不?
1

评分人数

    • jellyhk: 感情好把自己都搞进去了!呵呵技术 + 1

TOP

不理解!
是从A文件夹下提取任意一个文件到b任意一个文件夹?
第2次的时候是不是就不能提取文件到上面那个 ...
jellyhk 发表于 2011-12-15 10:37



    不理解!
1.是从A文件夹下提取任意一个文件到b任意一个文件夹?
2.第2次的时候是不是就不能提取文件到上面那个文件夹了?是不是说每个文件夹都要从A下提取一个文件过来!
3.----------另外文件是一样的吗?都是txt或其他?
4.--------A文件夹是固定叫A吗?B文件夹是叫B么》?

-----------------------------------------------------------------

1.是任意提取,也可以按名称排列,依次提取. 速度优先.
2.每从A中提取出一个就删除一个,以免提取到重复文件. 每个文件夹-每轮都要提取到一个文件,共提取N轮.  最终的结果是B中的每个文件夹都提取到N个文件.
3. 文件可能是一样的,也可能不一样.   有TXT HTML或 MHT
4.是固定的.  

谢谢.

TOP

不知道这样子行不?
BS0小陈 发表于 2011-12-15 11:06



    谢谢.
用少量文件测试成功.

当A样本用10000个文件, B样本用200个子文件夹时,
输入N值后, 运行BAT,很久没有反应.
N取1也没反应.

XP 双核 2G

谢谢.

TOP

本帖最后由 jellyhk 于 2011-12-16 11:03 编辑

3楼!
1:为什么3楼的18行代码中的"!%c:"=%!"就变成文件夹了呢?
2:为什么要这么写呢?好象!%c%!也行为什么要多   “=
3:第10行的dir /a-d /b /s A *.*  不能写成dir /a-d /b /s A\*.*
本人已死!不用联系!~
要联系下来联系!~~

TOP

本帖最后由 jellyhk 于 2011-12-16 11:12 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /ad /b /s B\*') do (
  4. set /a a+=1
  5. set !a!=%%a
  6. echo !a!=%%a
  7. )
  8. set /p n=请输入
  9. set /a aa=!n!*!a!
  10. for /f "delims=" %%a in ('dir /a-d /b /s A\*.*') do (
  11. set /a b+=1
  12. set /a c+=1
  13. if "!c!" gtr "!a!" set c=1
  14. call :a "%%a"
  15. if !b! == !n! pause&exit
  16. )
  17. :a
  18. move %1 "!%c:"=%!"
  19. goto :eof
复制代码
这样不知道行不!请看到6楼的问题会的帮忙解惑!
本人已死!不用联系!~
要联系下来联系!~~

TOP

谢谢,  测试没成功.  可能我的描述不清楚.

我换个描述,最终的效果类似:从A文件夹中随机剪切N个文件到B文件夹的任一子文件夹中,直到每个子文件夹都被剪切到N个文件.

TOP

即,
第一次从A中剪切N个文件到B中的任一子文件夹,
第二次从A中剪切N个文件到B中的另一子文件夹,
直到每个子文件夹都被剪切到N个文件

A中文件数保证有足够文件数.

TOP

回复 9# dan5262


请把所有的问题描述更新到顶楼,一遍他人查看。

TOP

不是说一次移动一个文件,现在又变成一次N个,虽然说最后结果是一样的。。。不知道LZ到底想要那样的过程。。。

TOP

不是说一次移动一个文件,现在又变成一次N个,虽然说最后结果是一样的。。。不知道LZ到底想要那样的过程。。 ...
slore 发表于 2011-12-16 11:52



   
谢谢关注,实际上是一个效果,前一种描述是N轮, 即每次提取一个,提取N次。  后一种描述是一次随机提取N个。

TOP

例如A下有1.txt -10.txt
B下有文件夹a b c
set n=2
你现在的意思是:随便移动2个文件放到A\a,再把这2个文件删除吗?  把1.txt 2.txt放到A\a!
    并删除A\下的这2个文件?
再继续移动文件一直到A\下的没有文件?
本人已死!不用联系!~
要联系下来联系!~~

TOP

回复 13# jellyhk


    是的,剪切的意思。 如果不删除的话,下次就会提取到重复文件。

谢谢。

TOP

本帖最后由 jellyhk 于 2011-12-17 16:55 编辑

我郁闷!浪费了我8个小时终于搞定了!算来算去数字光错!头疼!
楼主你要这样的代码有什么用哦!貌似没什么吧!
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p n=输入要复制的本数:
  4. set c=0
  5. for /f "delims=" %%a in ('dir /a-d /s /b a\*.*') do (set /a c+=1)
  6. set /a b=c-n
  7. :l
  8. for /f "delims=" %%a in ('dir /ad /s /b b\*') do (
  9.    set a=0
  10.    for /f "delims=" %%b in ('dir /a-d /s /b a\*.*') do (
  11.      set /a a+=1
  12.      if !a! gtr !b! move "%%b" "%%a"
  13.      if !a! == !c! set /a c-=n&set /a b-=n
  14. )
  15. )
  16. dir /a-d /s /b a\*.*
  17. if errorlevel == 1 (exit) else (goto l)
复制代码
=====================我简化了下
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p n=输入要复制的本数:
  4. :l
  5. for /f "delims=" %%a in ('dir /ad /s /b b\*') do (
  6.    set a=0
  7.    for /f "delims=" %%b in ('dir /a-d /s /b a\*.*') do (
  8.      set /a a+=1
  9.      if !a! leq !n! move "%%b" "%%a"  
  10. )
  11. )
  12. dir /a-d /s /b a\*.*
  13. if errorlevel == 1 (exit) else (goto l)
复制代码
本人已死!不用联系!~
要联系下来联系!~~

TOP

返回列表