![Board logo](images/default/logo.gif)
标题: [文件操作] 【已解决】能否批处理将指定图片复制到多个目录中,并自动按规率改名? [打印本页]
作者: 228630386 时间: 2025-1-23 23:00 标题: 【已解决】能否批处理将指定图片复制到多个目录中,并自动按规率改名?
本帖最后由 228630386 于 2025-1-26 00:14 编辑
将指定的图片如A.jpg复制到当前目录下的文件夹中,放在尺寸为1200x1200尺寸的最后,命名规率是1,2,3,4,15,16,17,18,19,20,21,22,最多是23,其它尺寸图片保留不变。
假设1113235656文件夹中尺寸为1200x1200像素有1,2,3,4,15,16,17,然后复制文件A进去改为18
假设1656596556文件夹中尺寸为1200x1200像素有1,2,3,4,15,16,17,18,19,然后复制文件A进去改为20
如果类推,如果文件夹中有其它尺寸图片,命名不变。
因为上传不了附件,不知道大神们能不能理解。
作者: jiavip 时间: 2025-1-24 07:30
本帖最后由 jiavip 于 2025-1-24 07:38 编辑
楼主表达不是很清楚想要的准确效果,但是这些理论上来说都可以实现的,
一般想到的是借助第三方工具,但是VBS有个函数就可以判断!- Set Img = CreateObject("WIA.ImageFile")
- Img.LoadFile WScript.Arguments(0)
- Wscript.Echo "宽"&Img.Width&"高"& Img.Height&"像素"&Img.HorizontalResolution
复制代码
脚本可以分这几个思路去写,
1,先获取图片基本参数,宽、高、像素!
2,再获取 1113235656 & 1656596556 文件夹下有现多少个文件,
3, 写好&判断 文件递进命名规则,
4,IF 文件,,操作,,,,脚本完成!
作者: aloha20200628 时间: 2025-1-24 11:11
本帖最后由 aloha20200628 于 2025-1-24 19:00 编辑
回复 1# 228630386
以下代码存为 test.bat 运行,与 *.jpg 图片文件同目录
代码中假设 1200x1200 尺寸的图片文件名命名规则均为 n.jpg 其中 n=整数。- 2>1/* ::
- @echo off &setlocal &set/p "pF=拖入要复制的图片文件:"
- if not defined pF exit/b
- set "pF=%pF:"=%"
- for /f %%n in (
- 'dir /b/a-d *.jpg^|findstr /ib "[0-9][0-9]*\.jpg"^|cscript /nologo /e:jscript "%~f0" '
- ) do if %%n gtr 0 copy /y "%pF%" "%%n.jpg"
- pause&exit/b */
- ws=WSH.stdin, wi=WSH.createobject("wia.imagefile"), maxF=-1;
- while (!ws.atendofstream) {
- pF=ws.readline(), wi.loadfile(pF);
- if (wi.width != 1200 || wi.height != 1200) continue;
- n=~~pF.split('.')[0];
- if (n>maxF) maxF=n;
- }
- WSH.echo(++maxF), WSH.quit();
复制代码
作者: jiavip 时间: 2025-1-24 14:19
回复 3# aloha20200628
哇,BAT & JS 混编的狠人啊,!膜拜一下!
作者: 228630386 时间: 2025-1-24 18:11
本帖最后由 228630386 于 2025-1-24 18:12 编辑
回复 3# aloha20200628
你好,是需要将拷贝到文件夹哪一张图片改为n.jpg吗?不是很理解怎么操作。拖入一个图片文件,我试了把拷图的图拖进去,但是不行。
作者: aloha20200628 时间: 2025-1-24 18:46
本帖最后由 aloha20200628 于 2025-1-24 19:02 编辑
回复 5# 228630386
订正了3楼代码...
代码运行开始会等候输入或拖入要复制的图片文件全路径名(例如 d:\jpg\abc.jpg)
然后遍历当前目录中全部1200x1200尺寸的 n.jpg 文件,获取其中 n 的最大值+1(例如19+1),作为 d:\jpg\abc.jpg 文件复制到当前目录后的新名 20.jpg
作者: 228630386 时间: 2025-1-24 19:51
本帖最后由 228630386 于 2025-1-24 19:57 编辑
回复 6# aloha20200628
在单个目录下可以实现n+1改名了,但通常一个文件夹中有多个子文件夹,如:
d:\111\abc.jpg
d:\222\abc.jpg
d:\333\abc.jpg
d:\444\abc.jpg
能否改成当前目录下的所有文件夹的目录中全部1200x1200尺寸的abc.jpg,都改在n+1呢?
@echo off
for /d %%a in (*) do copy "abc.jpg" "%%~a\"
pause
这是我目前在用的,但不能自动n+1改名,要手动操作。
作者: aloha20200628 时间: 2025-1-24 21:12
本帖最后由 aloha20200628 于 2025-1-24 21:13 编辑
回复 7# 228630386
以下代码会递归处理当前目录下的每一个子目录》将要复制的图片文件复制到每一个子目录中,并更名为与其对应的 n+1.jpg- 2>1/* ::
- @echo off &setlocal &set/p "pF=拖入要复制的图片文件:"
- if not defined pF exit/b
- set "pF=%pF:"=%"
- for /r /d %%d in (*) do (
- pushd "%%d" & for /f %%n in (
- 'dir /b/a-d *.jpg^|findstr /ib "[0-9][0-9]*\.jpg"^|cscript /nologo /e:jscript "%~f0" "%%d" '
- ) do if %%n gtr 0 copy /y "%pF%" "%%n.jpg"
- popd)
- pause&exit/b */
- v=WSH.arguments, ws=WSH.stdin, wi=WSH.createobject("wia.imagefile"), maxF=-1;
- while (!ws.atendofstream) {
- pF=ws.readline(), wi.loadfile(v(0)+'\\'+pF);
- if (wi.width != 1200 || wi.height != 1200) continue;
- n=~~pF.split('.')[0];
- if (n>maxF) maxF=n;
- }
- WSH.echo(++maxF), WSH.quit();
复制代码
作者: 228630386 时间: 2025-1-26 00:14
回复 8# aloha20200628
太感谢了,完美解决了问题,不用手动操作,节省太多时间了。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |