Board logo

标题: [文件操作] [已解决]求助批处理按顺序依次复制一张或多张图片到多个文件夹 [打印本页]

作者: 盛世繁华    时间: 2022-8-7 23:05     标题: [已解决]求助批处理按顺序依次复制一张或多张图片到多个文件夹

本帖最后由 盛世繁华 于 2022-8-8 20:39 编辑

感谢大佬@qixiaobin0715 鸣谢!

需要的功能是,将bat所在目录(不含子文件夹)的图片,按顺序依次一张或多张(自定义)的复制到所在目录的文件夹。图片格式是常见的格式:jpg,jpeg,png,bmp。

比如当前目录下有5个文件夹,3张图片:
folder1
folder2
folder3
folder4
folder5
1.jpg
2.png
3.bmp

想要的结果是:
如果设置每个文件夹复制进去1张图片,那么结果是,
1.jpg复制进folder1
2.png复制进folder2
3.bmp复制进folder3
1.jpg复制进folder4
2.png复制进folder5
如果设置每个文件夹复制进去2张图片,那么结果是,
1.jpg 2.png复制进folder1
3.bmp 1.jpg复制进folder2
2.png 3.bmp复制进folder3
1.jpg 2.png复制进folder4
3.bmp 1.jpg复制进folder5
大于2张以此类推
.........

找了一个类似的:BAT批处理让文件夹里的文件单个或多个依次移动到另外一个文件夹。不过这个是移动到另外一个文件夹,现在需要移动到“已有”的“多个”文件夹。

@echo off
@echo off&setlocal enabledelayedexpansion
::设置一次移动多少个文件?
set s=1
::120为多少秒
for /f "delims=" %%a in ('dir /a-d/s/b "E:\上传文件\ceshi\data2\*"') do (
    if !n! equ %s% (
        set n=0
        ping 127.0.0.1 -n "120">nul
    )
    set /a n+=1
    move %%a "E:\上传文件\ceshi\data\"
)
pause
exit

请求大佬帮忙解救~~~~
作者: qixiaobin0715    时间: 2022-8-8 10:39

本帖最后由 qixiaobin0715 于 2022-8-8 19:53 编辑

回复 1# 盛世繁华
抛砖引玉。代码另存为ANSI编码,假设每次复制2个文件到文件夹中,Groups=2。未测试:
  1. @echo off
  2. set Groups=2
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /b /a-d^|findstr /e "jpg jpeg png bmp"') do (
  5.     set /a n+=1
  6.     set _!n!=%%i
  7. )
  8. set m=0
  9. for /d %%i in (*) do (
  10.     for /l %%j in (1,1,%Groups%) do (
  11.         set /a m+=1
  12.         for %%k in (_!m!) do copy "!%%k!" "%%i\"
  13.         if !m! equ !n! set m=0
  14.     )
  15. )
  16. pause
复制代码

作者: 盛世繁华    时间: 2022-8-8 19:41

回复 2# qixiaobin0715
不清楚为什么,双击bat没反应
作者: qixiaobin0715    时间: 2022-8-8 19:55

回复 3# 盛世繁华
第4行for循环少了in,已修改。
作者: 盛世繁华    时间: 2022-8-8 20:35

回复 4# qixiaobin0715
大佬666啊,我弄了一天不知道怎么弄这个文件夹的循环,运行完美!!
作者: 盛世繁华    时间: 2023-3-2 15:31

回复 2# qixiaobin0715
再请教下,如果按随机顺序复制如何修改?
作者: qixiaobin0715    时间: 2023-3-3 08:41

本帖最后由 qixiaobin0715 于 2023-3-23 10:14 编辑

回复 6# 盛世繁华
那就不是修改的问题,是要推倒重来的:
  1. @echo off
  2. set Groups=2
  3. for /d %%i in (*) do (
  4.     setlocal enabledelayedexpansion
  5.     for /f "delims=" %%j in ('dir /b /a-d^|findstr /e "jpg jpeg png bmp"') do (
  6.         set /a n+=1
  7.         set _!random!_!n!=%%j
  8.     )
  9.     set /a n-=%Groups%
  10.     for /f "tokens=1* delims==" %%k in ('set _^|more +!n!') do (
  11.         copy "%%l" "%%i\"
  12.     )
  13.     endlocal
  14. )
  15. pause
复制代码
估计你也不是实际需求,而是心血来潮。如果是的话,以后这种事还是自己来思考解决的好。
代码未经测试。
作者: 盛世繁华    时间: 2023-3-4 09:59

学习了 我以为加%random%就行了呢 回复 7# qixiaobin0715
作者: qixiaobin0715    时间: 2023-3-23 08:15

回复 8# 盛世繁华
我也是在这里学习的,代码不收取任何费用,有问题可以在论坛里问,或许别人也能帮到你。上面代码已修改,看看行不。
作者: 盛世繁华    时间: 2023-3-23 10:50

谢谢我先对照分析一下 :loveliness: 回复 9# qixiaobin0715
作者: 盛世繁华    时间: 2023-3-23 11:03

代码可以了~ 回复 9# qixiaobin0715




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