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

[文件操作] [已解决]按文件名移动文件的批处理如何精简?

[复制链接]
发表于 2010-7-28 11:00:50 | 显示全部楼层 |阅读模式
文件名
文件夹
x月份aaf(aa) \x月份
第x季度bbf(bb)\x季度
第X期CCf(cc)\x期

将同一目录下EXCEL文件移动到相应文件夹,文件名为“x月份aa”、“第x季度bb”、“第X期CC”,根据命名相应移到文件夹下,对应关系见上表
  1. echo off
  2. for /f %%i in ('dir /b *.xls') do (
  3.     setlocal enabledelayedexpansion
  4.     for /f "tokens=1,3,4 delims=_" %%j in ('dir /b %%i') do (
  5.         set cir=%%l
  6.         
  7.         if "!cir:~2,1!"=="月" (
  8.            set circle=!cir:~0,4!  
  9.            echo !circle!
  10.            set name=!cir:~4!
  11.            echo !name!
  12.            if "!circle!"=="11月份"  ( set ftime=11月  
  13.                   echo !ftime!
  14.            )
  15.            if "!circle!"=="12月份"  ( set ftime=12月  
  16.                   echo !ftime!
  17.            )
  18.          )  else if "!cir:~2,1!"=="期" (
  19.          
  20.            set circle=!cir:~0,3!
  21.            echo !circle!
  22.            set name=!cir:~3!
  23.            echo !name!
  24.             if "!circle!"=="第一期"  set ftime=一期
  25.             if "!circle!"=="第二期"  set ftime=二期
  26.             if "!circle!"=="第三期"  set ftime=三期
  27.             if "!circle!"=="第四期"  set ftime=四期
  28.         ) else if "!cir:~2,1!"=="季" (
  29.            set circle=!cir:~0,4!
  30.            echo !circle!
  31.            set name=!cir:~4!
  32.            echo !name!
  33.            if "!circle!"=="第一季度"  set ftime=1季度
  34.            if "!circle!"=="第二季度"  set ftime=2季度
  35.            if "!circle!"=="第三季度"  set ftime=3季度
  36.            if "!circle!"=="第四季度"  set ftime=4季度
  37.         )
复制代码
在论坛搜索了一番,不知道自己的问题在哪里,请各位大侠指点!谢谢啦!

[ 本帖最后由 achu 于 2010-7-29 17:05 编辑 ]
发表于 2010-7-28 12:21:30 | 显示全部楼层
貌似没短多少。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /b "*.xls"') do (
  4. set "t=%%a"
  5. set "t=!t:月份=:!"
  6. if /i not "!t!" equ "%%a" (
  7. for /f "tokens=1,2 delims=:." %%b in ("!t!") do (
  8. md "f(%%c)"
  9. move /y "%%a" "f(%%c)\%%b月份.xls"
  10. )
  11. )
  12. set "t=!t:季度=:!"
  13. if /i not "!t!" equ "%%a" (
  14. for /f "tokens=1,2 delims=:." %%b in ("!t!") do (
  15. set "tt=%%b"
  16. set "tt=!tt:~1,1!"
  17. md "f(%%c)"
  18. move /y "%%a" "f(%%c)\!tt!季度.xls"
  19. )
  20. )
  21. set "t=!t:期=:!"
  22. if /i not "!t!" equ "%%a" (
  23. for /f "tokens=1,2 delims=第:." %%b in ("!t!") do (
  24. md "f(%%c)"
  25. move /y "%%a" "f(%%c)\%%b期.xls"
  26. )
  27. )
  28. )
复制代码
 楼主| 发表于 2010-7-28 14:13:31 | 显示全部楼层

回复 2楼 的帖子

谢谢你的解答啊,
我正在学习,不过"t=!t:月份=:!"看不懂,刚刚也没搜到相关的帖子,能解答一下吗?
 楼主| 发表于 2010-7-28 17:43:27 | 显示全部楼层

这句话读明白了

精简很多了,尤其是这句话t=!t:月份=:!,比我原来的精简好多

不过不太理解的是,为什么要加if /i not "!t!" equ "%%c"判断?
 楼主| 发表于 2010-7-29 09:51:36 | 显示全部楼层

不好意思,之前说得不是很清楚

将同一目录下EXCEL文件移动到相应文件夹,文件名为“x月份aa”、“第x季度bb”、“第X期CC”,根据命名相应移到文件夹下,对应关系见下表

文件名           文件夹          备注
n月份aa         xx\n月           aa与xx是对应关系
第n季度bb     yy\n季度        bb与yy是对应关系
第n期cc         zz\n期           cc与zz是对应关系

代码如下,经过s700800900指点,已经精简了很多,感觉重复代码还是不少,不知道能否再精简.请大家多多指点!谢谢!
  1.   
  2. @echo off
  3. setlocal enabledelayedexpansion
  4. for /f %%i in ('dir /b *.xls')  do (
  5. for /f "tokens=1,3,4 delims=_" %%a in ('dir /b %%i') do (
  6.     set "t=%%c"
  7.     set "t=!t:月份=:!"
  8.    
  9.     if /i not "!t!" equ "%%c" (
  10.         for /f "tokens=1,2 delims=:." %%e in ("!t!") do (
  11.             set str=%%f
  12.             if "!str!"=="aa" set pname=xx
  13.             if "!str!"=="bb" set pname=yy
  14.             if "!str!"=="cc" set pname=zz
  15.             if "!str!"=="dd" set pname=uu
  16.             if "!str!"=="ee" set pname=vv        
  17.             echo !pname!
  18.         )
  19.      )
  20.      set "t=!t:季度=:!"
  21.      if /i not "!t!" equ "%%c" (
  22.          for /f "tokens=1,2 delims=:." %%e in ("!t!") do (
  23.              set "tt=%%e"
  24.              set "tt=!tt:~1,1!"
  25.              set str=%%f
  26.                if "!str!"=="aa" set pname=xx
  27.             if "!str!"=="bb" set pname=yy
  28.             if "!str!"=="cc" set pname=zz
  29.             if "!str!"=="dd" set pname=uu
  30.             if "!str!"=="ee" set pname=vv            
  31.             echo !pname!
  32.             
  33.           )
  34.       )
  35.      set "t=!t:期=:!"
  36.      if /i not "!t!" equ "%%c" (
  37.          for /f "tokens=1,2 delims=第:." %%e in ("!t!") do (
  38.              set str=%%f
  39.                if "!str!"=="aa" set pname=xx
  40.             if "!str!"=="bb" set pname=yy
  41.             if "!str!"=="cc" set pname=zz
  42.             if "!str!"=="dd" set pname=uu
  43.             if "!str!"=="ee" set pname=vv            
  44.             echo !pname!
  45.             
  46.          )
  47.       )
  48. )
  49. )
复制代码
发表于 2010-7-29 16:44:34 | 显示全部楼层

回复 4楼 的帖子

啊,这个  t=!t:月份=:!  是把t变量中的字符串“月份”替换为“:”,
假如有一个文件名为 "12月份啊.xls" ,把它赋给t后,再执行 t=!t:月份=:!  ,t 变量的值就会变为 "12:啊.xls"
而 if /i not "!t!" equ "%%a" 是判断 原 t 的值是否和 替换后的 t 值相等,如果不相等,说明原来的 t 值里存在“月份”关键字,这时就会执行 if 括号内的命令了。

同理的, "t=!t:季度=:!" 和 "t=!t:期=:!" 也和上面的类似,后面的if语句都是为了判断原 t 变量内是否在相应的关键字。
 楼主| 发表于 2010-7-29 17:05:28 | 显示全部楼层

谢谢你的解答,终于理解了,这个方法真巧妙!

谢谢s700800900!讲解得非常详细,感谢你!
发表于 2010-7-29 17:18:04 | 显示全部楼层
改进了一下。你看看
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. set "name=aa bb cc dd ee"
  4. set "aa=xx"
  5. set "bb=yy"
  6. set "cc=zz"
  7. set "dd=uu"
  8. set "ee=vv"

  9. for /f "delims=" %%i in ('dir /b "*.xls"') do (
  10. for /f "tokens=1,3,4 delims=_" %%a in ("%%i") do (
  11.     set "t=%%c"
  12.     set "t=!t:月份=:!"
  13.     if /i not "!t!" equ "%%c" (
  14.         for /f "tokens=1,2 delims=:." %%e in ("!t!") do (
  15.             set "str=%%f"
  16.             for %%g in (!name!) do (
  17.             if /i "!str!" equ "%%g" set pname=!%%g!
  18.                 )
  19.             echo !pname!
  20.         )
  21.      )
  22.         set "t=%%c"
  23.      set "t=!t:季度=:!"
  24.      if /i not "!t!" equ "%%c" (
  25.          for /f "tokens=1,2 delims=:." %%e in ("!t!") do (
  26.             set "tt=%%e"
  27.             set "tt=!tt:~1,1!"
  28.             set "str=%%f"
  29.             for %%g in (!name!) do (
  30.             if /i "!str!" equ "%%g" set pname=!%%g!
  31.                 )
  32.         echo !pname!
  33.           )
  34.       )
  35.      set "t=%%c"
  36.      set "t=!t:期=:!"
  37.      if /i not "!t!" equ "%%c" (
  38.          for /f "tokens=1,2 delims=第:." %%e in ("!t!") do (
  39.             set "str=%%f"
  40.             for %%g in (!name!) do (
  41.             if /i "!str!" equ "%%g" set pname=!%%g!
  42.                 )
  43.            echo !pname!
  44.          )
  45.       )
  46. )
  47. )
  48. pause
复制代码
 楼主| 发表于 2010-7-30 09:49:05 | 显示全部楼层

谢谢s700800900

在另一个帖子里已回复了,真的很感谢你!代码运行通过,还学到了好几个知识点!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-9 16:02

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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