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

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

如题,把*文件夹里的照片中的日期删除,比如:20090812???.jpg,20101012???.jpg;;;分别把其中的日期删除,并把原日期为2009开头的文件复制(移动)至*盘,2009文件夹中。2010的文件复制(移动)至2010文件夹中。

假定照片在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
复制代码
学习...

TOP

回复 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. )
复制代码
“阿姐走了。。。可是。。。我。。。我愿意。”

TOP

回复 3# hfg1977


    咋有两段话?一楼的我试一下

TOP

回复 2# xudaweb


    不成功的,文件没反应。

TOP

回复 5# zhengdalu

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

你把这批处理copy在C:\Picture里执行下看看!!
学习...

TOP

回复 3# hfg1977

在Win7环境下测试你的代码,除了新建两个文件夹,没有rename和Move的动作...
学习...

TOP

本帖最后由 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
复制代码
学习...

TOP

把批处理文件放到照片目录下。
  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
复制代码

TOP

返回列表