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

[文本处理] [已解决]批处理如何把文本按相应内容分类并指定规律合并?

[复制链接]
发表于 2013-7-2 10:55:58 | 显示全部楼层 |阅读模式
要的 效果是 如当前ABC文件夹内有*.TXT个 文本。
按相应字符串进行分类,以下有代码产考。完美处理!
但现在想再给里面加一点特性,就是分类好后,在分类的文件夹里把同一类的TXT文本进行合并。
且判断该每一个文件名最后2个字母是否为A 或 F1 。如果是 则先分开合并,合并名为目录名如1-D10。
以下的代码 只实现的功能是 查找相应特征字符串进行分类,分类以该信息作为文件夹命名。
  1. @echo off
  2. cls
  3. for /l %%i in (1,1,3) do echo.
  4. color 1A
  5. ECHO         ┏━━━━━━━━━━━━━━━━━━━━┓
  6. ECHO          ┃                        ┃
  7. ECHO    ┏━━━━┫       当前选择:     刀具分类          ┣━━━━┓
  8. ECHO    ┃      ┃                       ┃      ┃
  9. ECHO    ┃       ┗━━━━━━━━━━━━━━━━━━━━┛      ┃
  10. echo     ┃                     ==处理说明↓==                         ┃
  11. echo.    ┃                                                            ┃
  12. ECHO    ┃    ┗━━直接按回车默认选择“==NC==”文件夹处理━━┛      ┃
  13. echo.    ┃                                                            ┃
  14. echo.    ┏------------------------------------------------------------┓
  15. echo     ┣    ★★★★★★====默认选择==NC==处理。====★★★★★★    ┫
  16. echo.    ┗------------------------------------------------------------┛
  17. echo.    ┃                                                            ┃
  18. echo.    ┣========处理后自动在==NC==文件夹内生成N+个刀类文件名========┫
  19. set /p DJFL=
  20. echo     ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
  21. echo     ┃              ===正在处理...以下为刀具信息!====            ┃
  22. pushd "==NC=="
  23. @echo off&setlocal enabledelayedexpansion
  24. for /f "tokens=1,2* delims=:" %%i in ('findstr /ic:"TOOL NAME = " /c:"(Cutter Name:" /c:"( DIA. = " /c:"(  Dia:" /c:"(Tool Name:" *.nc') do (
  25.     if "!%%i!" == "" (   
  26.        set "str="
  27.        if "%%k" == "" (
  28.           for /f "tokens=2-6 delims==,)" %%a in ("%%j") do (
  29.               if "%%c" =="" (
  30.                  set D=%%a&set "R=%%b"
  31.               ) else set D=%%c&set "R=%%e"
  32.           )
  33.        ) else for /f "tokens=1-6 delims=:) " %%a in ("%%k") do (
  34.                   if "%%d" neq "" (
  35.                       set D=%%a&set "R=%%d"
  36.                   ) else set "str=%%a"
  37.               )
  38.              if "!str!" == "" (
  39.                 for %%f in (D R) do for /f %%h in ("!%%f!") do (
  40.                     set "%%f=%%h"
  41.                     for /l %%e in (1 1 6) do (
  42.                         if "!%%f:~-1!" == "0" set "%%f=!%%f:~,-1!"
  43.                    )
  44.                         if "!%%f!" neq "0." (
  45.                            if "!%%f:~-1!" == "." set "%%f=!%%f:~,-1!"
  46.                            set "%%f=%%f!%%f!"
  47.                         ) else set "%%f="
  48.                 )
  49.                           set "str=!D!!R!"
  50.             )
  51.                       set str2=!str:~-1!
  52.      IF /I '!str2!' =='R' set str=!str:~0,-1!
  53. )
  54.                           
  55. echo                         %%i——【!str!】
  56.                            md "!str!" 2>nul
  57.                            move "%%i" "!str!" 2>nul
  58.                            set "%%i=i"
  59.     )
  60. )
  61. pause
  62. echo     ┠──────────────────────────────┨
  63. echo     ┃               ===【刀具分类模拟完成!】===                 ┃
  64. ECHO     ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
  65. pause
复制代码
分好类后如下图


以D10文件夹为例
合并后 取文件名后两位如果是包含A 或F1 就先合并 名为1-D10 然后再合并剩下的 名为1-D10-G


如下图


其他所有分类文件夹一样。最后一步 把所有合并好的 TXT移至上一个目录。
附件  样本
http://pan.baidu.com/share/link? ... 23&uk=774360720

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-7-2 13:49:21 | 显示全部楼层
56行至57行间插入下面代码看看:

  1. for /f "tokens=2 delims=-" %%y in ("%%~ni") do (
  2.    if not "%%y"=="A" if not "%%y"=="F1" (
  3.            type "%%i">>"1-!str!-G.txt"
  4.    ) else type "%%i">>"1-!str!.txt"
  5. )
复制代码
 楼主| 发表于 2013-7-2 18:44:18 | 显示全部楼层
回复 2# xxpinqz


    谢谢! 但是为什么 会出现漏掉没处理的?如下图

D4R0.5
R0.3
R0.5
没能处理到。且1-D10.TXT里边只合到一个。
如D10文件夹
021X4-F1
021X4-F3
021X4A
021X4B
064X1-F5
064X15A
要求红色的也就是 包含A  F1 就合并一块,可能表达不太详细。
谢谢
发表于 2013-7-2 19:10:50 | 显示全部楼层
觉得应该在24行后 判断文件名是否含关键词
 楼主| 发表于 2013-7-2 19:54:09 | 显示全部楼层
回复 4# terse


    24行 加应该行不通吧 必须要把他们正确分类 再进行分类合并。
重点就是 分类好后的文件名后 包含A  F1  R1 的分开合并一起。其余的按名称排序合并就行。
发表于 2013-7-2 22:05:53 | 显示全部楼层
回复 5# lateol
试下

  1. @echo off
  2. cls
  3. for /l %%i in (1,1,3) do echo.
  4. color 1A
  5. ECHO         ┏━━━━━━━━━━━━━━━━━━━━┓
  6. ECHO          ┃                        ┃
  7. ECHO    ┏━━━━┫       当前选择:     刀具分类          ┣━━━━┓
  8. ECHO    ┃      ┃                       ┃      ┃
  9. ECHO    ┃       ┗━━━━━━━━━━━━━━━━━━━━┛      ┃
  10. echo     ┃                     ==处理说明↓==                         ┃
  11. echo.    ┃                                                            ┃
  12. ECHO    ┃    ┗━━直接按回车默认选择“==NC==”文件夹处理━━┛      ┃
  13. echo.    ┃                                                            ┃
  14. echo.    ┏------------------------------------------------------------┓
  15. echo     ┣    ★★★★★★====默认选择==NC==处理。====★★★★★★    ┫
  16. echo.    ┗------------------------------------------------------------┛
  17. echo.    ┃                                                            ┃
  18. echo.    ┣========处理后自动在==NC==文件夹内生成N+个刀类文件名========┫
  19. set /p DJFL=
  20. echo     ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
  21. echo     ┃              ===正在处理...以下为刀具信息!====            ┃
  22. pushd "==NC=="
  23. @echo off&setlocal enabledelayedexpansion
  24. for /f "tokens=1,2* delims=:" %%i in ('findstr /ic:"TOOL NAME = " /c:"(Cutter Name:" /c:"( DIA. = " /c:"(  Dia:" /c:"(Tool Name:" *.nc') do (
  25.     if "!%%i!" == "" (
  26.        set "str="
  27.        if "%%k" == "" for /f "tokens=2-6 delims==,)" %%a in ("%%j") do (
  28.           if "%%c" =="" (
  29.              set D=%%a&set "R=%%b"
  30.           ) else set D=%%c&set "R=%%e"
  31.        ) else for /f "tokens=1-6 delims=:) " %%a in ("%%k") do (
  32.                    if "%%d" neq "" (
  33.                       set D=%%a&set "R=%%d"
  34.                    ) else set "str=%%a"
  35.                )

  36.                 if "!str!" == "" for %%f in (D R) do for /f %%h in ("!%%f!") do (
  37.                     set "%%f=%%h"
  38.                     for /l %%e in (1 1 6) do (
  39.                         if "!%%f:~-1!" == "0" set "%%f=!%%f:~,-1!"
  40.                     )

  41.                     if "!%%f!" neq "0." (
  42.                        if "!%%f:~-1!" == "." set "%%f=!%%f:~,-1!"
  43.                        if "!%%f!" neq "" set "%%f=%%f!%%f!"
  44.                     ) else set "%%f="
  45.                     set "str=!D!!R!"
  46.                 )
  47.                     md "!str!" 2>nul
  48.                     set "f=%%~ni"
  49.                     set "f=!f:~-2!"
  50.                     set s=-G
  51.                     for %%a in (A F1 R1) do if "!f:%%a=!" neq "!f!" set "s="
  52.                     if not exist "1-!str!!s!.txt" cd.>"1-!str!!s!.txt"
  53.                     copy "1-!str!!s!.txt"+"%%i" "1-!str!!s!.txt" >nul
  54.                     move "%%i" "!str!" 2>nul
  55.                     set "%%i=i"
  56.                     echo                         %%i——【!str!】


  57.     )
  58. )
  59. echo     ┠──────────────────────────────┨
  60. echo     ┃               ===【刀具分类模拟完成!】===                 ┃
  61. ECHO     ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
  62. pause


复制代码

评分

参与人数 1技术 +1 收起 理由
lateol + 1 好代码

查看全部评分

发表于 2013-7-2 22:44:09 | 显示全部楼层
本帖最后由 xxpinqz 于 2013-7-2 22:46 编辑

在MOVE之前判断应该没错的,除非有些文件没处理,另外上面的文件名称判断有误,还以为都是用-分割的
或者试试把下面的添加到代码的最后看看:

  1. set "com=dir /b/a-d %%a\*.nc^|findstr /iv ".*A\.nc .*F1\.nc .*R1\.nc""
  2. for /d %%a in (*) do (
  3.     copy /b "%%a\*A.nc"+ /b "%%a\*F1.nc"+ /b "%%a\*R1.nc" "1-%%a.txt" /y
  4.     for /f "delims=" %%b in ('%com%') do type "%%a\%%~nxb" >> "1-%%a-G.txt"
  5. )
复制代码

评分

参与人数 1技术 +1 收起 理由
lateol + 1 感谢热心帮助

查看全部评分

 楼主| 发表于 2013-7-2 23:44:39 | 显示全部楼层
回复 6# terse


    完美运行!谢谢。不知道有些电脑 文件排序好像有问题,顺序有点乱了。不能按文件名排序.我的电脑上OK。
 楼主| 发表于 2013-7-2 23:47:07 | 显示全部楼层
回复 7# xxpinqz


    好像如果该文件夹内不包含有A 的就处理有异常了,就只看到合成一个。
代码 学习了。呵呵
发表于 2013-7-3 00:03:42 | 显示全部楼层
回复 9# lateol
怪了,测了一下,还真的是一定要有含A的文件,其他的可以。
呵呵,我也不知道原因~~。还是用if判断保险点
 楼主| 发表于 2013-7-4 23:30:29 | 显示全部楼层
本帖最后由 lateol 于 2013-7-4 23:31 编辑

回复 6# terse


    set "f=%%~ni"
                    set "f=!f:~-2!"

                    set s=-G
                    for %%a in (A F1 R1) do if "!f:%%a=!" neq "!f!" set "s="
                    if not exist "1-!str!!s!.txt" cd.>"1-!str!!s!.txt"
                    copy "1-!str!!s!.txt"+"%%i" "1-!str!!s!.txt" >nul

请问一下 红色部分 是什么意思?没能理解透谢谢!
发表于 2013-7-5 00:14:54 | 显示全部楼层
set "f=%%~ni" 将文件名赋值给变量F

set "f=!f:~-2!" 截取文件名后两位

cd.>"1-!str!!s!.txt" 建空文件

"1-!str!!s!.txt"+"%%i" 合并文件
 楼主| 发表于 2013-7-5 08:55:51 | 显示全部楼层
回复 12# terse


    谢谢 明白了 。原来是查找符合 直接定向归类。。。强!
不过我觉得 如果我再添加个其他的特项不是难上加难了?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 03:12 , Processed in 0.011603 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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