标题: [文件操作] [已解决]批处理怎么将图片文件分配到对应的新文件夹去? [打印本页]
作者: linjuming 时间: 2011-3-29 17:57 标题: [已解决]批处理怎么将图片文件分配到对应的新文件夹去?
本帖最后由 linjuming 于 2011-3-31 15:12 编辑
——————————————————————————————————————————————
详细操作要求:
head.png处理:
如果不存在d:\cont\head_cont\文件夹,则创建d:\cont\head_cont\
如果d:\cont\head_cont\下没有子文件夹,则创建d:\cont\head_cont\head_cont_1文件夹
如果d:\cont\head_cont\ 有head_cont_2, head_cont_5这样不连续的文件夹,则创建head_cont_1文件夹
如果d:\cont\head_cont\ 有head_cont_1,head_cont_2, head_cont_5这样不连续的文件夹,则创建head_cont_3文件夹
复制d:\img\head.png 复制到 上一步的文件夹内,并重命名为head_cont_1.png(名字跟文件夹名一样)。
其他图片文件同样处理。
所有图片复制完以后创建d:\img\lock.txt文件,下次如果再运行bat,如果存在d:\img\lock.txt,则直接exit;
________________________________________________________________________
求扩展一下功能:
d:\img 下有如下文件:
head.png
head_1.png
head_2.png
foot.png
line.png
......
head.png 复制到 head_cont_5/head_cont_5.png
head_1.png 复制到 head_cont_6/head_cont_6.png
head_2.png 复制到 head_cont_7/head_cont_7.png
foot.png 复制到 foot_cont_5/foot_cont_5.png
line.png 复制到 line_cont_x/line_cont_x.png
.......
即截取_x前面的英文为文件夹_cont_?的前半部分(因为某些图片我想归类同一cont文件夹下)
作者: namejm 时间: 2011-3-29 18:52
光看图,云里雾里,楼主不妨再配合文字做一些介绍吧。
看你的图,我的理解是仅复制 d:\img\head.png 到 d:\cont\head_cont\head_cont_7 里就完事了
但是你的原意肯定不是这样的
还请楼主用文字描述一下完整意图
“相应”是怎样一种对应法则?
“锁定bat”的含义让人无所适从,推测你的意思是当本次复制到head_cont_7之后,下次再运行bat的时候,不再复制到head_cont_7里去吧?
请楼主多站在看帖人的角度想一下:我这样说别人能理解吗?会产生歧义吗?
作者: linjuming 时间: 2011-3-29 20:52
本帖最后由 linjuming 于 2011-3-29 20:56 编辑
head.png处理:
如果不存在d:\cont\head_cont\文件夹,则创建d:\cont\head_cont\
如果d:\cont\head_cont\下没有子文件夹,则创建d:\cont\head_cont\head_cont_1文件夹
如果d:\cont\head_cont\ 有head_cont_2, head_cont_5这样不连续的文件夹,则创建head_cont_1文件夹
如果d:\cont\head_cont\ 有head_cont_1,head_cont_2, head_cont_5这样不连续的文件夹,则创建head_cont_3文件夹
复制d:\img\head.png 复制到 上一步的文件夹内,并重命名为head_cont_1.png(名字跟文件夹名一样)。
其他图片文件同样处理。
所有图片复制完以后创建d:\img\lock.txt文件,下次如果再运行bat,如果存在d:\img\lock.txt,则直接exit;
作者: Batcher 时间: 2011-3-29 20:56
3# linjuming
请把问题描述全部更新到顶楼,以便他人查看。
作者: namejm 时间: 2011-3-29 21:53
d:\cont\head_cont\下只有形如head_cont_1,head_cont_2,……head_cont_N这样最后一节数字递增的子文件夹么?
假如只存在head_cont_1,head_cont_2, head_cont_5,只需要创建head_cont_3呢,还是需要同时创建head_cont_3和head_cont_4?
如果文件夹都是连续的,还需要接着最后那个编号创建新文件夹吗?如果要创建,要创建到多少号为止?
作者: linjuming 时间: 2011-3-29 22:43
本帖最后由 linjuming 于 2011-3-29 22:46 编辑
如存在1,2,3,则创建4,锁,exit!
如存在1,3,4,则创建2,锁,exit!
如存在1,4,6,则创建2,锁,exit!
如存在2,6,7,则创建1,锁,exit!
每次运行bat,只创建一次文件夹,号码取最小缺少的。
下次如果再运行,手动删除lock.txt,再按上面步骤进行。
作者: tmplinshi 时间: 2011-3-29 22:53
本帖最后由 tmplinshi 于 2011-3-31 13:26 编辑
- @echo off
- if exist "%~dp0\lock.txt" exit /b
- call :o "%~f0" >"%~dp0\lock.txt"
- exit /b
-
- :o
- pushd "%~dp1"
- echo %date% %time%
- echo,
- set "DestDir=d:\cont"
- set OutDir=
- set #dir_num#=1
- for %%i in (*.png) do (
- SetLocal EnableDelayedExpansion
- set OutDir_Pre=%DestDir%\%%~ni_cont\%%~ni_cont_
- if not exist "!OutDir_Pre!*" (
- set "OutDir=!OutDir_Pre!1"
- ) else (
- for /d %%D in ("!OutDir_Pre!*") do (
- set /a #dir_num# += 1, _%%~nxD = 0
- )
- for /l %%N in (1 1 !#dir_num#!) do (
- if not defined _%%~ni_cont_%%N (
- if not defined OutDir set OutDir=!OutDir_Pre!%%N
- )
- )
- )
- md "!OutDir!"
- copy "%%i" "!OutDir!\%%~ni_cont_!#dir_num#!.png" >nul
- echo !OutDir!\%%~ni_cont_!#dir_num#!.png
- EndLocal
- )
- POPD
- goto :eof
复制代码
作者: linjuming 时间: 2011-3-29 23:06
谢谢版主tmplinshi,很完美,不过复制过去的head.png没有重命名为head_cont_1.png,在哪里改一下?
半年没碰批处理,当初的基础基本上忘光了~~,看得一头雾水。
作者: tmplinshi 时间: 2011-3-29 23:29
8# linjuming
已修改
作者: linjuming 时间: 2011-3-29 23:36
太感激了!完美!
作者: haimer 时间: 2011-3-29 23:45
确实很完美
作者: hbwazxf 时间: 2011-3-30 13:23
新手学习一下吧。
作者: linjuming 时间: 2011-3-31 10:34
本帖最后由 linjuming 于 2011-3-31 10:37 编辑
求扩展一下功能:
d:\img 下有如下文件:
head.png
head_1.png
head_2.png
foot.png
line.png
......
head.png 复制到 head_cont_5/head_cont_5.png
head_1.png 复制到 head_cont_6/head_cont_6.png
head_2.png 复制到 head_cont_7/head_cont_7.png
foot.png 复制到 foot_cont_5/foot_cont_5.png
line.png 复制到 line_cont_x/line_cont_x.png
.......
即截取_x前面的英文为文件夹_cont_?的前半部分(因为某些图片我想归类同一cont文件夹下)
作者: tmplinshi 时间: 2011-3-31 11:21
本帖最后由 tmplinshi 于 2011-4-3 23:02 编辑
13# linjuming - @echo off
- if exist "%~dp0\lock.txt" exit /b
- call :o "%~f0" >"%~dp0\lock.txt"
- exit /b
-
- :o
- pushd "%~dp1"
- echo %date% %time%
- echo,
- set "DestDir=d:\cont"
- set OutDir=
- set #dir_num#=1
- for /f "delims=" %%i in (' dir /a:-d /b /o:n *.png ') do (
- SetLocal EnableDelayedExpansion
- set fname_old=%%~ni
- set "fname=!fname_old:.=<d>!"
- for %%i in ("!fname:_=.!") do set fname=%%~ni
- set fname=!fname:.=_!
- set "fname=!fname:<d>=.!"
- set OutDir_Pre=%DestDir%\!fname!_cont\!fname!_cont_
- if not exist "!OutDir_Pre!*" (
- set "OutDir=!OutDir_Pre!1"
- ) else (
- for /d %%D in ("!OutDir_Pre!*") do (
- set /a #dir_num# += 1, _%%~nxD = 0
- )
- for /l %%N in (1 1 !#dir_num#!) do (
- if not defined _!fname!_cont_%%N (
- if not defined OutDir set OutDir=!OutDir_Pre!%%N
- )
- )
- )
- md "!OutDir!"
- copy "%%i" "!OutDir!\!fname!_cont_!#dir_num#!.png" >nul
- echo !fname_old!.png -^> !OutDir!\!fname!_cont_!#dir_num#!.png
- EndLocal
- )
- POPD
- goto :eof
复制代码
作者: linjuming 时间: 2011-3-31 11:36
就是这样,谢谢版主高手!
作者: Batcher 时间: 2011-3-31 13:33
13# linjuming
请把所有的需求全部更新到顶楼
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |