标题: [文件操作] [已解决]求助批处理按顺序依次复制一张或多张图片到多个文件夹 [打印本页]
作者: 盛世繁华 时间: 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。未测试:- @echo off
- set Groups=2
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /a-d^|findstr /e "jpg jpeg png bmp"') do (
- set /a n+=1
- set _!n!=%%i
- )
-
- set m=0
- for /d %%i in (*) do (
- for /l %%j in (1,1,%Groups%) do (
- set /a m+=1
- for %%k in (_!m!) do copy "!%%k!" "%%i\"
- if !m! equ !n! set m=0
- )
- )
- 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# 盛世繁华
那就不是修改的问题,是要推倒重来的:- @echo off
- set Groups=2
- for /d %%i in (*) do (
- setlocal enabledelayedexpansion
- for /f "delims=" %%j in ('dir /b /a-d^|findstr /e "jpg jpeg png bmp"') do (
- set /a n+=1
- set _!random!_!n!=%%j
- )
- set /a n-=%Groups%
- for /f "tokens=1* delims==" %%k in ('set _^|more +!n!') do (
- copy "%%l" "%%i\"
- )
- endlocal
- )
- 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 |