找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24923|回复: 8

[文本处理] 批处理怎样实现更改重命名并分类复制?

[复制链接]
发表于 2011-9-23 21:33:28 | 显示全部楼层 |阅读模式
如题,把*文件夹里的照片中的日期删除,比如:20090812???.jpg,20101012???.jpg;;;分别把其中的日期删除,并把原日期为2009开头的文件复制(移动)至*盘,2009文件夹中。2010的文件复制(移动)至2010文件夹中。
发表于 2011-9-23 21:57:48 | 显示全部楼层
假定照片在C:\Picture文件夹内:
1. 分类移动到C:\Picture\2009和C:\Picture\2010文件夹中。
2. 重新命名C:\Picture文件夹内照片的名字(去除年月日)。

  1. @echo off&setlocal enabledelayedexpansion
  2. if not exist C:\Picture\2009 md C:\Picture\2009
  3. if not exist C:\Picture\2010 md C:\Picture\2010

  4. for %%i in (*.jpg) do (
  5.         for %%j in (%%~ni) do (
  6.                 set name=%%j
  7.                 set top4=!name:~,4!
  8.                 if !top4! equ 2009 copy %%~nj.jpg C:\Picture\2009\.
  9.                 if !top4! equ 2010 copy %%~nj.jpg C:\Picture\2010\.
  10.         )
  11. )

  12. for %%a in (*.jpg) do (
  13.         for %%b in (%%~na) do (
  14.                 set name1=%%b
  15.                 set nname=!name1:~8!
  16.                 ren %%b.jpg !nname!.jpg
  17.         )
  18. )
  19. pause&exit
复制代码
发表于 2011-9-24 01:16:32 | 显示全部楼层
回复 2# xudaweb
  1. @echo off
  2. md .\test\2009\ 2>nul
  3. md .\test\2010\ 2>nul

  4. move .\test\2009*.jpg .\test\2009\ 2>nul
  5. move .\test\2010*.jpg .\test\2010\ 2>nul
  6. echo.--------
  7. for /f "tokens=* delims=" %%i in ('dir /a-d/s/b .\test\*.jpg') do (
  8. set name=%%~nxi
  9. call set "name=%%name:~-7%%"
  10. call ren %%i %%name%%
  11. )
复制代码
  1. @echo off
  2. md .\test\2009\ 2>nul
  3. md .\test\2010\ 2>nul
  4. for /f "tokens=* delims=" %%i in ('dir /a-d/s/b .\test\*.jpg') do (
  5. set name=%%~nxi
  6. call set "top4=%%name:~,4%%"
  7. call set "name=%%name:~-7%%"
  8. for /f %%a in ('call echo %%top4%%') do (
  9.         if "%%a"=="2009" (
  10.                 call move %%i .\test\2009\%%name%%
  11.         ) else (
  12.                 if "%%a"=="2010" (
  13.                         call move %%i .\test\2010\%%name%%
  14.                 ) else (
  15.                         call ren %%i %%name%%
  16.                 )
  17.         )
  18. )
  19. )
复制代码
 楼主| 发表于 2011-9-24 15:09:54 | 显示全部楼层
回复 3# hfg1977


    咋有两段话?一楼的我试一下
 楼主| 发表于 2011-9-24 15:21:27 | 显示全部楼层
回复 2# xudaweb


    不成功的,文件没反应。
发表于 2011-9-26 18:35:38 | 显示全部楼层
回复 5# zhengdalu

为什么不成功?我在XP SP3和Win7下测试都可以(第一张照片命名还有点问题)

你把这批处理copy在C:\Picture里执行下看看!!
发表于 2011-9-26 18:43:20 | 显示全部楼层
回复 3# hfg1977

在Win7环境下测试你的代码,除了新建两个文件夹,没有rename和Move的动作...
发表于 2011-9-26 18:59:12 | 显示全部楼层
本帖最后由 xudaweb 于 2011-9-26 20:36 编辑

把此Batch放到照片文件夹内执行,可以把2009与2010开头的照片copy到对应的文件夹中。

  1. @echo off&setlocal enabledelayedexpansion
  2. md .\2009 2>nul
  3. md .\2010 2>nul

  4. for %%i in (*.jpg) do (
  5.         for %%j in (%%~ni) do (
  6.                 set name=%%j
  7.                 set top4=!name:~,4!
  8.                 if !top4! equ 2009 copy %%~nj.jpg .\2009\.
  9.                 if !top4! equ 2010 copy %%~nj.jpg .\2010\.
  10.         )
  11. )
  12. pause&exit
复制代码
精简了下,一个for循环就可以了。
  1. @echo off&setlocal enabledelayedexpansion
  2. md .\2009 2>nul
  3. md .\2010 2>nul

  4. for %%i in (*.jpg) do (
  5.       set name=%%~ni
  6.       set top4=!name:~,4!
  7.       if !top4! equ 2009 copy %%i .\2009\.
  8.       if !top4! equ 2010 copy %%i .\2010\.
  9. )
  10. pause&exit
复制代码
发表于 2011-9-26 20:00:03 | 显示全部楼层
把批处理文件放到照片目录下。
  1. @echo off
  2. SETLOCAL enabledelayedexpansion

  3. md d:\2009 2>nul
  4. md d:\2010 2>nul

  5. for %%i in (*.jpg) do (
  6.         set name1=%%i
  7.         set name2=!name1:~8!
  8.         set name3=!name1:~,4!
  9.         if "!name3!" == "2009" copy %%i d:\2009\!name2!
  10.         if "!name3!" == "2010" copy %%i d:\2010\!name2!
  11. )

  12. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 03:09 , Processed in 0.018286 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表