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

[文件操作] 同样的批处理,一位月份开头的可执行,两位月份开头的不行?

[复制链接]
发表于 2010-7-29 15:29:30 | 显示全部楼层 |阅读模式
将同一目录下EXCEL文件移动到相应文件夹,文件名为“x月份aa”、“第x季度bb”、“第X期CC”,根据命名相应移到文件夹下,对应关系见下表

文件名           文件夹          备注
n月份kk         nn\n月           kk与nn是对应关系
第n季度ss     mm\n季度        ss与mm是对应关系
第n期rr         oo\n期           rr与oo是对应关系

基本功能都实现了,当文件名为单数月开头时,也没问题;当为11月或12月时,再进一步做下面的判断,却不执行了,也不报错!请大伙帮忙指点指点,谢谢大伙!
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%i in ('dir /b *.xls')  do (
  4.         
  5. for /f "tokens=1,3,4 delims=_" %%a in ('dir /b %%i') do (
  6.             
  7.              set aa=%%c
  8.             
  9.             
  10.              if "!aa:~1,1!"=="月" (
  11.                  set "t=%%c"
  12.                  set "t=!t:月份=:!"
  13.                
  14.                  for /f "tokens=1,2 delims=:." %%e in ("!t!") do (
  15.                        set str=%%f
  16.                            
  17.                        if "!str!"=="kk"  (
  18.                             set pname=nn
  19.                             echo D:\testcc\2010\!pname!\%%e月\
  20.                             xcopy %%i D:\testcc\2010\!pname!\%%e月\
  21.                        
  22.                       ) else if "!str!"=="ss"  (
  23.                            set pname=mm
  24.                            echo D:\testcc\2010\!pname!\%%e月\
  25.                            xcopy %%i D:\testcc\2010\!pname!\%%e月\
  26.                       ) else if "!str!"=="rr" (
  27.                            set pname=oo      
  28.                            echo D:\testcc\2010\!pname!\%%e月\      
  29.                            xcopy %%i D:\testcc\2010\!pname!\%%e月\
  30.                        )
  31.                    )
  32.              ) else if "!aa:~2,1!"=="月"  (
  33.                  set "t=%%c"
  34.                  set "t=!t:月份=:!"                 
  35.                  for /f "tokens=1,2 delims=:." %%e in ("!t!") do (
  36.                             set str=%%f
  37.                             echo e=%%e
  38.                             echo str=!str!
  39.                             echo "!str!"=="kk"
  40.                       if "!str!"=="kk"  (
  41.                           set pname=nn
  42.                           echo D:\testcc\2010\!pname!\%%e月\
  43.                           xcopy %%i D:\testcc\2010\!pname!\%%e月\
  44.                        
  45.                        ) else if "!str!"=="ss"  (
  46.                             set pname=mm
  47.                             echo D:\testcc\2010\!pname!\%%e月\
  48.                             xcopy %%i D:\testcc\2010\!pname!\%%e月\
  49.                        ) else if "!str!"=="rr" (
  50.                             set pname=oo      
  51.                             echo D:\testcc\2010\!pname!\%%e月\      
  52.                             xcopy %%i D:\testcc\2010\!pname!\%%e月\
  53.                        )
  54.                    )
  55.                  
  56.              )
  57.        )
  58. )
复制代码

[ 本帖最后由 achu 于 2010-7-29 16:37 编辑 ]
发表于 2010-7-29 15:53:27 | 显示全部楼层
else 前后的命令都用括号括上,如
if 2 gtr 1 (echo yes) else (echo no)
 楼主| 发表于 2010-7-29 15:57:55 | 显示全部楼层

谢谢你的关注,

问题是同样的语句,对于单个数字月份开头的文件名就可以处理,而10,11,12月开头的文件名却不行!我先用的你方法再改一下代码
发表于 2010-7-29 17:36:11 | 显示全部楼层
试试。
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. set "name=kk ss rr"
  4. set "kk=nn"
  5. set "ss=mm"
  6. set "rr=oo"

  7. for /f "delims=" %%i in ('dir /b "*.xls"') do (
  8. for /f "tokens=1,3,4 delims=_" %%a in ("%%i") do (
  9.     set "t=%%c"
  10.     set "t=!t:月份=:!"
  11.     if /i not "!t!" equ "%%c" (
  12.         for /f "tokens=1,2 delims=:." %%e in ("!t!") do (
  13.             set "str=%%f"
  14.             for %%g in (!name!) do (
  15.             if /i "!str!" equ "%%g" set pname=!%%g!
  16.                 )
  17.             md "!pname!"
  18.             copy /y "%%i" "!pname!\%%e月.xls"
  19.         )
  20.      )
  21.         set "t=%%c"
  22.      set "t=!t:季度=:!"
  23.      if /i not "!t!" equ "%%c" (
  24.          for /f "tokens=1,2 delims=:." %%e in ("!t!") do (
  25.             set "tt=%%e"
  26.             set "tt=!tt:~1,1!"
  27.             set "str=%%f"
  28.             for %%g in (!name!) do (
  29.             if /i "!str!" equ "%%g" set pname=!%%g!
  30.                 )
  31.             md "!pname!"
  32.             copy /y "%%i" "!pname!\%%e季度.xls"
  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.             md "!pname!"
  44.             copy /y "%%i" "!pname!\%%e期.xls"
  45.          )
  46.       )
  47. )
  48. )
  49. pause
复制代码
发表于 2010-7-30 00:48:16 | 显示全部楼层
楼主是否能运行以下两句把结果帖来看看?
dir /b *.xls
dir/b/ad
发表于 2010-7-30 02:37:41 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /b *.ini') do (
  3.     set str=%%~na
  4.     if %%a gtr a (
  5.        for /f "tokens=1,2 delims=第季度期" %%i in ("!str!") do (
  6.            if "!str:季度=!" neq "!str!" (
  7.                  set "ph=%%j\%%i季度"
  8.            ) else set "ph=%%j\%%i期"
  9.        )
  10.     ) else (
  11.               for /f "tokens=1,2 delims=月份" %%i in ("!str!") do (
  12.                   set "ph=%%j\%%i月"
  13.               )
  14.       )
  15.               md "!ph!" >nul 2>nul
  16.               copy "%%a" "!ph!" >nul 2>nul
  17. )
  18. pause
复制代码
 楼主| 发表于 2010-7-30 09:39:57 | 显示全部楼层

谢谢版主的关注,图片贴于下

这是实验数据,如果不清楚我再改.请看第二幅图,第一幅图不对,不知道怎么删
 楼主| 发表于 2010-7-30 09:45:01 | 显示全部楼层

回复 4楼 的帖子

谢谢s700800900,用你的方法已经可以了。谢谢你啊,从你的代码中学到set时加引号的妙处,还有下面这段代码
  1. set "name=kk ss rr"
  2. set "kk=nn"
  3. set "ss=mm"
  4. set "rr=oo"
复制代码
对我这样的初学者启发很大,可以很方便地扩充。

谢谢你啦!
 楼主| 发表于 2010-7-30 11:19:00 | 显示全部楼层

回复 6楼 的帖子

谢谢terse,你的代码运行通过没问题了,正在读。这段代码真简洁!

谢谢大家的关注,这个论坛的热心人和高手真多!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 01:22 , Processed in 0.027077 second(s), 11 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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