标题: [代码合集] 求助批处理按顺序依次复制一张或多张图片到多个文件夹 [打印本页]
作者: 心若拂尘 时间: 2022-8-29 22:05 标题: 求助批处理按顺序依次复制一张或多张图片到多个文件夹
需要的功能是,将bat所在目录(不含子文件夹)的 图片 ,按顺序依次一张或多张(自定义)的复制到所在目录的文件夹。 图片 格式是常见的格式:jpg,jpeg,png,bmp。
比如当前目录下有5个文件夹,100张 图片 :
1
2
3
4
5
。。。文件夹有25个文件夹
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
。。。。。一百张图片顺序为1-100
想要的结果是:
如果设置每个文件夹移动进去4张 图片 ,那么结果是,按名称的进行排序的命名
1-4.jpg复制进1文件夹
5-8.jpg复制进2文件夹
9-12.jpg复制进3文件夹
13-16.jpg复制进4文件夹
17-21.jpg复制进5文件夹
几张照片以此类推
作者: Batcher 时间: 2022-8-30 08:50
回复 1# 心若拂尘
建议给出真实的文件名。
因为系统资源管理器会认为 11.jpg 排在 2.jpg 前面,跟人的排序逻辑不一样。
作者: hfxiang 时间: 2022-8-30 11:43
- @rem 请保存文件为ANSI编码
- @rem 假设目标文件夹D:\test\targe下有jpg1~25,共25个子文件夹
- @echo off
- Setlocal enabledelayedexpansion
- set "source=D:\test\source"
- set "target=D:\test\target"
- for /f "delims==" %%a in ('set _ 2^>nul') do set "%%a="
- for /l %%a in (1,1,100) do (
- set/a n=%%a+3,n/=4
- set "_%%a=!n!"
- )
- cd /d "%source%"
- for /f %%a in ('dir *.jpg *.jpeg *.png *.bmp /b /s /a-d') do (
- move /y "%%~fa" "%target%\jpg!_%%~na!\"
- )
- endlocal
复制代码
作者: hfxiang 时间: 2022-8-30 12:26
自动建立子文件夹,并移动文件- @echo off
- Setlocal enabledelayedexpansion
- set "source=D:\test\source"
- set "target=D:\test\target"
- cd /d "%source%"
- for /f %%a in ('dir *.jpg *.jpeg *.png *.bmp /b /s /a-d') do (
- set/a n=%%~na+3,n/=4
- mkdir "%target%\jpg!n!" 2>nul
- move /y "%%~fa" "%target%\jpg!n!\"
- )
- endlocal
复制代码
作者: 心若拂尘 时间: 2022-8-30 14:26
回复 2# Batcher
前面多个0呢类似01-010,011-099这样下去呢
作者: 心若拂尘 时间: 2022-8-30 14:31
回复 4# hfxiang
大佬运行没有反应呢
作者: Batcher 时间: 2022-8-30 15:55
回复 6# 心若拂尘
这就是为啥让你给出真实文件名的原因了,因为那个代码的逻辑可以处理你编的某一种文件名,遇到其它文件名可能会出错。
作者: Batcher 时间: 2022-8-30 17:14
回复 1# 心若拂尘
请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA- @echo off
- REM 每3个文件移动到一个文件夹
- set "AvgNum=3"
- cd /d "%~dp0"
- setlocal enabledelayedexpansion
- set "FileCount=-1"
- REM dir /b /a-d *.jpg *.jpeg *.png *.bmp 文件名顺序不一定是想要的结果
- for /f "delims=" %%i in ('dir /b /a-d ^| findstr /e /c:".jpg" /c:".jpeg" /c:".png" /c:".bmp"') do (
- set /a FileCount+=1
- set /a FolderCount=FileCount/AvgNum+1
- if not exist "!FolderCount!" (
- md "!FolderCount!"
- )
- move /y "%%i" "!FolderCount!\"
- )
复制代码
作者: qixiaobin0715 时间: 2022-8-31 16:39
如果像楼主在5楼所说的那样,可借用Batcher的代码修改:- @echo off
- set "AvgNum=3"
- cd /d "%~dp0"
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /a-d ^| findstr /e /c:".jpg" /c:".jpeg" /c:".png" /c:".bmp"') do (
- set fn=%%~ni
- set /a "FolderCount=(!fn:~1!-1)/AvgNum+1"
- if not exist "!FolderCount!" (
- md "!FolderCount!"
- )
- move /y "%%i" "!FolderCount!\"
- )
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |