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

[文件操作] 请问批处理如何随机从A目录复制文件到B目录?

比如:
我A目录有1000个文件.文件名各异,

为了防止按文件名首字母顺序提取,我需要随机提取复制200个文件到B目录,

请问这样的批处理怎么写?

感谢大家.万分感谢

如果不随机的话 就会出现下图所示的 很多相同首字母的文件聚集在一起了!

谢谢解答!

TOP

随机提取,我想批处理取文本必然是有规律的吧,如何能够随即呢,最多是规律比较复杂.....期待牛人解答!

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%a in (1,1,200) do (set /a n=!random! %% 1000
  4.      for /f "tokens=1* delims=:"  %%i in ('findstr /n ".*" A.txt') do (
  5.           if  %%i==!n! (echo %%j>>B.txt)
  6.         
  7.   )
  8. )
  9. pause
复制代码

TOP

是这样子的 a目录有很多文件 我只是举例可能是1000个文件 其实是更多的 3000-1万个左右吧,没有具体数量的.

我只想做到从A文件夹随机复制指定数量的文件到B文件夹/

请问这个批处理如何写?再次感谢edmond 大哥的热心解答!谢谢

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. color 1f
  4. dir /b *.txt "D:\A\" >>tem.ini 2>nul
  5. echo 请输入你要拷贝的数量,按回车继续
  6. set /p s=
  7. echo 请输入你源文件盘的文件数量,按回车继续
  8. set /p r=
  9. for /l  %%a in (1,1,!s!) do (set /a n=!random! %% !r!
  10.    for /f "delims=: tokens=1*" %%i in ('findstr /n ".*" tem.ini') do (
  11.         if !n!==%%i  (copy /y D:\A\%%j  D:\B\)
  12.   )
  13. )
  14. cls
  15. del tem.ini
  16. pause
复制代码
目录要根据你的实际修改一下

TOP

如果文件不是全部 txt 就把 dir /b  *.txt  改成 dir /b *.*

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. color 1f
  4. dir /b *.txt "D:\A\" >>tem.ini 2>nul
  5. echo 请输入你要拷贝的数量,按回车继续
  6. set /p s=
  7. echo 请输入你源文件盘的文件数量,按回车继续
  8. set /p r=
  9. for /l %%a in (1,1,!s!) do (set /a n=!random! %% !r!
  10. for /f "delims=: tokens=1*" %%i in ('findstr /n ".*" tem.ini') do (
  11. if !n!==%%i (copy /y D:\A\%%j D:\B\)
  12. )
  13. )
  14. cls
  15. del tem.ini
  16. pause
复制代码
现在可以用了,但复制的速度很慢,我一个源文件夹有6000多个文件 复制200个文件到到D:\B\ 花了将6分钟.

请问能否更高效的效率执行吗?
还有,复制过去之后,还得把源文件夹的文件删除才行,就相当于一个移动的过程.

最后非常感谢您的解答,解决了我多日的难题,谢谢!




[ 本帖最后由 skyuser 于 2010-9-16 22:17 编辑 ]

TOP

楼上代码快才是怪事,tem.ini 文件有6000行,光运行一次 findstr .* tem.ini  就够你受的了,更何况还要运行200次
还有,你上面的代码没对重复文件作判断啊,如果遇上随机数相同的话,岂不是复制的文件没有200个?
技术问题请到论坛发帖求助!

TOP

确实如LS所说 我复制200个到B文件夹 实际上只有170多个文件 请问能帮我改善一下吗?谢谢.

还有最主要 已复制过的文件 就给他从源文件夹删除吧 谢谢!

TOP

请先备份源文件,测试成功后再正式运行
:
  1. @echo off
  2. set "lj=%cd%"
  3. cd/d D:\A\
  4. (for %%a in (*) do (
  5.    setlocal enabledelayedexpansion
  6.    echo !random!!random!!random! %%a
  7.    endlocal
  8. ))>"%lj%\tem"
  9. sort /+3 "%lj%\tem" /o "%lj%\tem.ini"
  10. del "%lj%\tem"
  11. echo 请输入你要拷贝的数量,按回车继续
  12. set /p s=
  13. for /f "usebackq tokens=1* delims= " %%a in ("%lj%\tem.ini") do (
  14.     set /a n+=1
  15.     set "wjm=%%b"
  16.     setlocal enabledelayedexpansion
  17.     if !N! gtr !s! goto end
  18.     move "!wjm!" "d:\b\"
  19.     endlocal
  20. )
  21. :end
  22. cd/d %lj%
  23. pause
复制代码
技术问题请到论坛发帖求助!

TOP

感谢斑主熬夜为我解决问题,

现已完美解决,速度也很快! 赞一个!~~

非常感谢!!敬礼!!!

TOP

受教了!我也不过是初学者,不要如此打击吗!

TOP

re 13楼
不要误会,绝没有任何打击你的意思,只是指出8楼代码缺点,可能语气和用词不太恰当,抱歉!!
技术问题请到论坛发帖求助!

TOP

我也来练练手,无临时文件版。
  1. @echo off&setlocal enabledelayedexpansion
  2. set file_count=1
  3. set/p _folder=[请把你需要处理的文件夹拖放到此并按回车]:&echo.
  4. pushd %_folder%
  5. if exist random_file rd/s/q random_file
  6. md random_file
  7. set/p num_copy=请输入你想随机复制的文件数量:&echo.
  8. for /f "delims=" %%I in ('dir/b/s/a-d *.txt') do (
  9.      set my_random=!random!!random!
  10.      set "_file_!my_random!=%%I"
  11.    )
  12. echo -^>随机抽取文件中
  13. for /f "tokens=2 delims==" %%a in ('set _file') do (
  14.      copy "%%a" %_folder%\random_file\ >nul 2>nul
  15.      title [复制了!file_count!个文件]
  16.      if !file_count! geq %num_copy% goto copy_done
  17.      set /a file_count=!file_count!+1
  18.    )
  19. :copy_done
  20. echo.&echo 复制完毕.
  21. start %_folder%\random_file
  22. pause>nul
复制代码

TOP

返回列表