标题: [文本处理] 批处理怎样实现更改重命名并分类复制? [打印本页]
作者: zhengdalu 时间: 2011-9-23 21:33 标题: 批处理怎样实现更改重命名并分类复制?
如题,把*文件夹里的照片中的日期删除,比如:20090812???.jpg,20101012???.jpg;;;分别把其中的日期删除,并把原日期为2009开头的文件复制(移动)至*盘,2009文件夹中。2010的文件复制(移动)至2010文件夹中。
作者: xudaweb 时间: 2011-9-23 21:57
假定照片在C:\Picture文件夹内:
1. 分类移动到C:\Picture\2009和C:\Picture\2010文件夹中。
2. 重新命名C:\Picture文件夹内照片的名字(去除年月日)。- @echo off&setlocal enabledelayedexpansion
- if not exist C:\Picture\2009 md C:\Picture\2009
- if not exist C:\Picture\2010 md C:\Picture\2010
-
- for %%i in (*.jpg) do (
- for %%j in (%%~ni) do (
- set name=%%j
- set top4=!name:~,4!
- if !top4! equ 2009 copy %%~nj.jpg C:\Picture\2009\.
- if !top4! equ 2010 copy %%~nj.jpg C:\Picture\2010\.
- )
- )
-
- for %%a in (*.jpg) do (
- for %%b in (%%~na) do (
- set name1=%%b
- set nname=!name1:~8!
- ren %%b.jpg !nname!.jpg
- )
- )
- pause&exit
复制代码
作者: hfg1977 时间: 2011-9-24 01:16
回复 2# xudaweb - @echo off
- md .\test\2009\ 2>nul
- md .\test\2010\ 2>nul
-
- move .\test\2009*.jpg .\test\2009\ 2>nul
- move .\test\2010*.jpg .\test\2010\ 2>nul
- echo.--------
- for /f "tokens=* delims=" %%i in ('dir /a-d/s/b .\test\*.jpg') do (
- set name=%%~nxi
- call set "name=%%name:~-7%%"
- call ren %%i %%name%%
- )
复制代码
- @echo off
- md .\test\2009\ 2>nul
- md .\test\2010\ 2>nul
- for /f "tokens=* delims=" %%i in ('dir /a-d/s/b .\test\*.jpg') do (
- set name=%%~nxi
- call set "top4=%%name:~,4%%"
- call set "name=%%name:~-7%%"
- for /f %%a in ('call echo %%top4%%') do (
- if "%%a"=="2009" (
- call move %%i .\test\2009\%%name%%
- ) else (
- if "%%a"=="2010" (
- call move %%i .\test\2010\%%name%%
- ) else (
- call ren %%i %%name%%
- )
- )
- )
- )
复制代码
作者: zhengdalu 时间: 2011-9-24 15:09
回复 3# hfg1977
咋有两段话?一楼的我试一下
作者: zhengdalu 时间: 2011-9-24 15:21
回复 2# xudaweb
不成功的,文件没反应。
作者: xudaweb 时间: 2011-9-26 18:35
回复 5# zhengdalu
为什么不成功?我在XP SP3和Win7下测试都可以(第一张照片命名还有点问题)
你把这批处理copy在C:\Picture里执行下看看!!
作者: xudaweb 时间: 2011-9-26 18:43
回复 3# hfg1977
在Win7环境下测试你的代码,除了新建两个文件夹,没有rename和Move的动作...
作者: xudaweb 时间: 2011-9-26 18:59
本帖最后由 xudaweb 于 2011-9-26 20:36 编辑
把此Batch放到照片文件夹内执行,可以把2009与2010开头的照片copy到对应的文件夹中。- @echo off&setlocal enabledelayedexpansion
- md .\2009 2>nul
- md .\2010 2>nul
-
- for %%i in (*.jpg) do (
- for %%j in (%%~ni) do (
- set name=%%j
- set top4=!name:~,4!
- if !top4! equ 2009 copy %%~nj.jpg .\2009\.
- if !top4! equ 2010 copy %%~nj.jpg .\2010\.
- )
- )
- pause&exit
复制代码
精简了下,一个for循环就可以了。- @echo off&setlocal enabledelayedexpansion
- md .\2009 2>nul
- md .\2010 2>nul
-
- for %%i in (*.jpg) do (
- set name=%%~ni
- set top4=!name:~,4!
- if !top4! equ 2009 copy %%i .\2009\.
- if !top4! equ 2010 copy %%i .\2010\.
- )
- pause&exit
复制代码
作者: hankerer 时间: 2011-9-26 20:00
把批处理文件放到照片目录下。- @echo off
- SETLOCAL enabledelayedexpansion
-
- md d:\2009 2>nul
- md d:\2010 2>nul
-
- for %%i in (*.jpg) do (
- set name1=%%i
- set name2=!name1:~8!
- set name3=!name1:~,4!
- if "!name3!" == "2009" copy %%i d:\2009\!name2!
- if "!name3!" == "2010" copy %%i d:\2010\!name2!
- )
-
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |