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

[文件操作] [已解决]批处理怎么将图片文件分配到对应的新文件夹去?

本帖最后由 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文件夹下)
1

评分人数

    • tmplinshi: 感谢给帖子标题标注[已解决]字样PB + 2

光看图,云里雾里,楼主不妨再配合文字做一些介绍吧。
看你的图,我的理解是仅复制 d:\img\head.png 到 d:\cont\head_cont\head_cont_7 里就完事了
但是你的原意肯定不是这样的
还请楼主用文字描述一下完整意图
“相应”是怎样一种对应法则?
“锁定bat”的含义让人无所适从,推测你的意思是当本次复制到head_cont_7之后,下次再运行bat的时候,不再复制到head_cont_7里去吧?
请楼主多站在看帖人的角度想一下:我这样说别人能理解吗?会产生歧义吗?
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

本帖最后由 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;

TOP

3# linjuming


请把问题描述全部更新到顶楼,以便他人查看。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

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?
如果文件夹都是连续的,还需要接着最后那个编号创建新文件夹吗?如果要创建,要创建到多少号为止?
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

本帖最后由 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,再按上面步骤进行。

TOP

本帖最后由 tmplinshi 于 2011-3-31 13:26 编辑
  1. @echo off
  2. if exist "%~dp0\lock.txt" exit /b
  3. call :o "%~f0" >"%~dp0\lock.txt"
  4. exit /b
  5. :o
  6. pushd "%~dp1"
  7. echo %date%    %time%
  8. echo,
  9. set "DestDir=d:\cont"
  10. set OutDir=
  11. set #dir_num#=1
  12. for %%i in (*.png) do (
  13.     SetLocal EnableDelayedExpansion
  14.     set OutDir_Pre=%DestDir%\%%~ni_cont\%%~ni_cont_
  15.     if not exist "!OutDir_Pre!*" (
  16.         set "OutDir=!OutDir_Pre!1"
  17.     ) else (
  18.         for /d %%D in ("!OutDir_Pre!*") do (
  19.            set /a #dir_num# += 1, _%%~nxD = 0
  20.         )
  21.         for /l %%N in (1 1 !#dir_num#!) do (
  22.             if not defined _%%~ni_cont_%%N (
  23.                  if not defined OutDir set OutDir=!OutDir_Pre!%%N
  24.             )
  25.         )
  26.     )
  27.     md "!OutDir!"
  28.     copy "%%i" "!OutDir!\%%~ni_cont_!#dir_num#!.png" >nul
  29.     echo !OutDir!\%%~ni_cont_!#dir_num#!.png
  30.     EndLocal
  31. )
  32. POPD
  33. goto :eof
复制代码
1

评分人数

TOP

谢谢版主tmplinshi,很完美,不过复制过去的head.png没有重命名为head_cont_1.png,在哪里改一下?
半年没碰批处理,当初的基础基本上忘光了~~,看得一头雾水。

TOP

8# linjuming


已修改

TOP

太感激了!完美!

TOP

确实很完美

TOP

新手学习一下吧。

TOP

本帖最后由 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文件夹下)

TOP

本帖最后由 tmplinshi 于 2011-4-3 23:02 编辑

13# linjuming
  1. @echo off
  2. if exist "%~dp0\lock.txt" exit /b
  3. call :o "%~f0" >"%~dp0\lock.txt"
  4. exit /b
  5. :o
  6. pushd "%~dp1"
  7. echo %date%    %time%
  8. echo,
  9. set "DestDir=d:\cont"
  10. set OutDir=
  11. set #dir_num#=1
  12. for /f "delims=" %%i in (' dir /a:-d /b /o:n *.png ') do (
  13.     SetLocal EnableDelayedExpansion
  14.     set fname_old=%%~ni
  15.     set "fname=!fname_old:.=<d>!"
  16.     for %%i in ("!fname:_=.!") do set fname=%%~ni
  17.     set fname=!fname:.=_!
  18.     set "fname=!fname:<d>=.!"
  19.     set OutDir_Pre=%DestDir%\!fname!_cont\!fname!_cont_
  20.     if not exist "!OutDir_Pre!*" (
  21.         set "OutDir=!OutDir_Pre!1"
  22.     ) else (
  23.         for /d %%D in ("!OutDir_Pre!*") do (
  24.            set /a #dir_num# += 1, _%%~nxD = 0
  25.         )
  26.         for /l %%N in (1 1 !#dir_num#!) do (
  27.             if not defined _!fname!_cont_%%N (
  28.                  if not defined OutDir set OutDir=!OutDir_Pre!%%N
  29.             )
  30.         )
  31.     )
  32.     md "!OutDir!"
  33.     copy "%%i" "!OutDir!\!fname!_cont_!#dir_num#!.png" >nul
  34.     echo !fname_old!.png -^> !OutDir!\!fname!_cont_!#dir_num#!.png
  35.     EndLocal
  36. )
  37. POPD
  38. goto :eof
复制代码

TOP

就是这样,谢谢版主高手!

TOP

返回列表