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

[代码合集] 求助批处理按顺序依次复制一张或多张图片到多个文件夹

需要的功能是,将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文件夹

几张照片以此类推

回复 1# 心若拂尘


建议给出真实的文件名。
因为系统资源管理器会认为 11.jpg 排在 2.jpg 前面,跟人的排序逻辑不一样。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. @rem 请保存文件为ANSI编码
  2. @rem 假设目标文件夹D:\test\targe下有jpg1~25,共25个子文件夹
  3. @echo off
  4. Setlocal enabledelayedexpansion
  5. set "source=D:\test\source"
  6. set "target=D:\test\target"
  7. for /f "delims==" %%a in ('set _ 2^>nul') do set "%%a="
  8. for /l %%a in (1,1,100) do (
  9. set/a n=%%a+3,n/=4
  10. set "_%%a=!n!"
  11. )
  12. cd /d "%source%"
  13. for /f %%a in ('dir *.jpg *.jpeg *.png *.bmp /b /s /a-d') do (
  14. move /y "%%~fa" "%target%\jpg!_%%~na!\"
  15. )
  16. endlocal
复制代码

TOP

自动建立子文件夹,并移动文件
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. set "source=D:\test\source"
  4. set "target=D:\test\target"
  5. cd /d "%source%"
  6. for /f %%a in ('dir *.jpg *.jpeg *.png *.bmp /b /s /a-d') do (
  7. set/a n=%%~na+3,n/=4
  8. mkdir "%target%\jpg!n!" 2>nul
  9. move /y "%%~fa" "%target%\jpg!n!\"
  10. )
  11. endlocal
复制代码

TOP

回复 2# Batcher


    前面多个0呢类似01-010,011-099这样下去呢

TOP

回复 4# hfxiang


    大佬运行没有反应呢

TOP

回复 6# 心若拂尘


    这就是为啥让你给出真实文件名的原因了,因为那个代码的逻辑可以处理你编的某一种文件名,遇到其它文件名可能会出错。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 1# 心若拂尘


请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
  1. @echo off
  2. REM 每3个文件移动到一个文件夹
  3. set "AvgNum=3"
  4. cd /d "%~dp0"
  5. setlocal enabledelayedexpansion
  6. set "FileCount=-1"
  7. REM dir /b /a-d *.jpg *.jpeg *.png *.bmp 文件名顺序不一定是想要的结果
  8. for /f "delims=" %%i in ('dir /b /a-d ^| findstr /e /c:".jpg" /c:".jpeg" /c:".png" /c:".bmp"') do (
  9.     set /a FileCount+=1
  10.     set /a FolderCount=FileCount/AvgNum+1
  11.     if not exist "!FolderCount!" (
  12.         md "!FolderCount!"
  13.     )
  14.     move /y "%%i" "!FolderCount!\"
  15. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

如果像楼主在5楼所说的那样,可借用Batcher的代码修改:
  1. @echo off
  2. set "AvgNum=3"
  3. cd /d "%~dp0"
  4. setlocal enabledelayedexpansion
  5. for /f "delims=" %%i in ('dir /b /a-d ^| findstr /e /c:".jpg" /c:".jpeg" /c:".png" /c:".bmp"') do (
  6.     set fn=%%~ni
  7.     set /a "FolderCount=(!fn:~1!-1)/AvgNum+1"
  8.     if not exist "!FolderCount!" (
  9.         md "!FolderCount!"
  10.     )
  11.     move /y "%%i" "!FolderCount!\"
  12. )
复制代码

TOP

返回列表