Board logo

标题: [文本处理] 批处理每个文件夹随机复制3张照片 [打印本页]

作者: 3537589    时间: 2023-12-9 17:13     标题: 批处理每个文件夹随机复制3张照片

本帖最后由 3537589 于 2023-12-9 17:15 编辑


随机选取这些文件里面 3张图片。复制到新文件夹里面。自动重命名
求大神帮忙,谢谢了
作者: Batcher    时间: 2023-12-9 17:18

回复 1# 3537589


    根据什么规则重命名?
作者: 3537589    时间: 2023-12-9 17:28

回复 2# Batcher

重命名 1.2.3.4 .5 这样命名以此类推下去就可以
作者: 77七    时间: 2023-12-9 19:20

本帖最后由 77七 于 2023-12-9 19:24 编辑

回复 3# 3537589


  1. @echo off
  2. rem 批处理保存为ansi编码格式
  3. set newFolder=a
  4. set m=3
  5. cd /d "%~dp0"
  6. md "%newFolder%"
  7. for /f "delims=" %%d in ('dir /b /ad') do (
  8. if "%%d" neq "%newFolder%" (
  9. setlocal
  10. for %%a in ("%newFolder%\*.jpg") do set /a k+=1
  11. for %%a in ("%%d\*.jpg") do (
  12. call set _%%random%%_%%random%%=%%a
  13. )
  14. for /f "tokens=1* delims==" %%a in ('2^>nul set _') do (
  15. set /a n+=1,k+=1
  16. set file=%%b
  17. setlocal enabledelayedexpansion
  18. if !n! leq %m% (
  19. copy "!file!" "!newFolder!\!k!.jpg"
  20. )
  21. endlocal
  22. )
  23. endlocal
  24. )
  25. )
  26. pause
复制代码

作者: 3537589    时间: 2023-12-9 21:27

回复 4# 77七
谢谢了。
作者: Five66    时间: 2023-12-10 00:15

  1. @echo off&chcp 936
  2. set count=3
  3. set fd=___aaa
  4. if not exist "%fd%" md "%fd%"
  5. set /a fn+=1
  6. for /d %%x in (*) do (
  7. if "%%x" neq "%fd%" (
  8. setlocal
  9. for %%y in ("%%x\*.*p*") do (
  10. set /a a+=1&set file=%%y
  11. call set "@@%%random%%@%%a%%_%%~xy=%%y"
  12. )
  13. for /f "tokens=1 delims==" %%z in ('set @@ 2^>nul') do (
  14. set /a c+=1
  15. if not defined done (
  16. set fx=%%z
  17. setlocal enabledelayedexpansion
  18. if %count% geq !c!  (
  19. echo copy /y "!%%z!" "!fd!\!fn!!fx:*_=!"
  20. copy /y "!%%z!" "!fd!\!fn!!fx:*_=!" && set /a fn+=1
  21. for %%h in (!fn!) do endlocal&set fn=%%h
  22. ) else endlocal&set done=1
  23. )
  24. )
  25. for /f %%h in ('echo %%fn%%') do endlocal&set fn=%%h
  26. )
  27. )
  28. echo,&pause&exit/b
复制代码

作者: qixiaobin0715    时间: 2023-12-11 10:33

本帖最后由 qixiaobin0715 于 2023-12-11 11:45 编辑

新文件夹为“abc”。
1.代码第10行的数字为需要复制的图片个数;
2.代码第8行可以保证设置的变量随机数名称不会重复;
3.图片扩展名为jpg;
  1. @echo off
  2. md ..\abc
  3. for /f "delims=" %%i in ('dir /b /ad') do (
  4.     setlocal enabledelayedexpansion
  5.     pushd "%%i"
  6.     for /f "delims=" %%j in ('dir /b /a-d *.jpg') do (
  7.         set /a n+=1
  8.         set "_!random!-!n!=%%j"
  9.     )
  10.     set /a n-=3
  11.     for /f "tokens=1* delims==" %%k in ('set _^|more +!n!') do copy "%%l" "..\..\abc\"
  12.     popd
  13.     endlocal
  14. )
  15. move "..\abc"
  16. pause
复制代码
代码未经测试。
作者: qixiaobin0715    时间: 2023-12-11 15:18

本帖最后由 qixiaobin0715 于 2023-12-11 15:51 编辑

重命名的需求未注意到。
代码中 第2行 为设置复制图片数量:
  1. @echo off
  2. set num=3
  3. md ..\abc
  4. setlocal enabledelayedexpansion
  5. for /f "delims=" %%i in ('dir /b /ad') do (
  6.     setlocal enabledelayedexpansion
  7.     pushd "%%i"
  8.     for /f "delims=" %%j in ('dir /b /a-d *.jpg') do (
  9.         set /a n+=1
  10.         set "_!random!-!n!=%%j"
  11.     )
  12.     set /a n-=num
  13.     for /f "tokens=1* delims==" %%k in ('set _^|more +!n!') do (
  14.         set /a x+=1
  15.         copy "%%l" "..\..\abc\!x!.jpg"
  16.     )
  17.     popd
  18.     endlocal
  19.     set /a x+=num
  20. )
  21. move "..\abc"
  22. pause
复制代码





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