标题: [文本处理] [已解决]批处理如何把文本按相应内容分类并指定规律合并? [打印本页]
作者: lateol 时间: 2013-7-2 10:55 标题: [已解决]批处理如何把文本按相应内容分类并指定规律合并?
要的 效果是 如当前ABC文件夹内有*.TXT个 文本。
按相应字符串进行分类,以下有代码产考。完美处理!
但现在想再给里面加一点特性,就是分类好后,在分类的文件夹里把同一类的TXT文本进行合并。
且判断该每一个文件名最后2个字母是否为A 或 F1 。如果是 则先分开合并,合并名为目录名如1-D10。
以下的代码 只实现的功能是 查找相应特征字符串进行分类,分类以该信息作为文件夹命名。- @echo off
- cls
- for /l %%i in (1,1,3) do echo.
- color 1A
- ECHO ┏━━━━━━━━━━━━━━━━━━━━┓
- ECHO ┃ ┃
- ECHO ┏━━━━┫ 当前选择: 刀具分类 ┣━━━━┓
- ECHO ┃ ┃ ┃ ┃
- ECHO ┃ ┗━━━━━━━━━━━━━━━━━━━━┛ ┃
- echo ┃ ==处理说明↓== ┃
- echo. ┃ ┃
- ECHO ┃ ┗━━直接按回车默认选择“==NC==”文件夹处理━━┛ ┃
- echo. ┃ ┃
- echo. ┏------------------------------------------------------------┓
- echo ┣ ★★★★★★====默认选择==NC==处理。====★★★★★★ ┫
- echo. ┗------------------------------------------------------------┛
- echo. ┃ ┃
- echo. ┣========处理后自动在==NC==文件夹内生成N+个刀类文件名========┫
- set /p DJFL=
- echo ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
- echo ┃ ===正在处理...以下为刀具信息!==== ┃
- pushd "==NC==\"
- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1,2* delims=:" %%i in ('findstr /ic:"TOOL NAME = " /c:"(Cutter Name:" /c:"( DIA. = " /c:"( Dia:" /c:"(Tool Name:" *.nc') do (
- if "!%%i!" == "" (
- set "str="
- if "%%k" == "" (
- for /f "tokens=2-6 delims==,)" %%a in ("%%j") do (
- if "%%c" =="" (
- set D=%%a&set "R=%%b"
- ) else set D=%%c&set "R=%%e"
- )
- ) else for /f "tokens=1-6 delims=:) " %%a in ("%%k") do (
- if "%%d" neq "" (
- set D=%%a&set "R=%%d"
- ) else set "str=%%a"
- )
- if "!str!" == "" (
- for %%f in (D R) do for /f %%h in ("!%%f!") do (
- set "%%f=%%h"
- for /l %%e in (1 1 6) do (
- if "!%%f:~-1!" == "0" set "%%f=!%%f:~,-1!"
- )
- if "!%%f!" neq "0." (
- if "!%%f:~-1!" == "." set "%%f=!%%f:~,-1!"
- set "%%f=%%f!%%f!"
- ) else set "%%f="
- )
- set "str=!D!!R!"
- )
- set str2=!str:~-1!
- IF /I '!str2!' =='R' set str=!str:~0,-1!
- )
-
- echo %%i——【!str!】
- md "!str!" 2>nul
- move "%%i" "!str!" 2>nul
- set "%%i=i"
- )
- )
- pause
- echo ┠──────────────────────────────┨
- echo ┃ ===【刀具分类模拟完成!】=== ┃
- ECHO ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
- pause
复制代码
分好类后如下图
[attach]6529[/attach]
以D10文件夹为例
合并后 取文件名后两位如果是包含A 或F1 就先合并 名为1-D10 然后再合并剩下的 名为1-D10-G
[attach]6528[/attach]
如下图
[attach]6527[/attach]
其他所有分类文件夹一样。最后一步 把所有合并好的 TXT移至上一个目录。
附件 样本
http://pan.baidu.com/share/link? ... 23&uk=774360720
作者: xxpinqz 时间: 2013-7-2 13:49
56行至57行间插入下面代码看看:- for /f "tokens=2 delims=-" %%y in ("%%~ni") do (
- if not "%%y"=="A" if not "%%y"=="F1" (
- type "%%i">>"1-!str!-G.txt"
- ) else type "%%i">>"1-!str!.txt"
- )
复制代码
作者: lateol 时间: 2013-7-2 18:44
回复 2# xxpinqz
谢谢! 但是为什么 会出现漏掉没处理的?如下图
D4R0.5
R0.3
R0.5
没能处理到。且1-D10.TXT里边只合到一个。
如D10文件夹
021X4-F1
021X4-F3
021X4A
021X4B
064X1-F5
064X15A
要求红色的也就是 包含A F1 就合并一块,可能表达不太详细。
谢谢
作者: terse 时间: 2013-7-2 19:10
觉得应该在24行后 判断文件名是否含关键词
作者: lateol 时间: 2013-7-2 19:54
回复 4# terse
24行 加应该行不通吧 必须要把他们正确分类 再进行分类合并。
重点就是 分类好后的文件名后 包含A F1 R1 的分开合并一起。其余的按名称排序合并就行。
作者: terse 时间: 2013-7-2 22:05
回复 5# lateol
试下- @echo off
- cls
- for /l %%i in (1,1,3) do echo.
- color 1A
- ECHO ┏━━━━━━━━━━━━━━━━━━━━┓
- ECHO ┃ ┃
- ECHO ┏━━━━┫ 当前选择: 刀具分类 ┣━━━━┓
- ECHO ┃ ┃ ┃ ┃
- ECHO ┃ ┗━━━━━━━━━━━━━━━━━━━━┛ ┃
- echo ┃ ==处理说明↓== ┃
- echo. ┃ ┃
- ECHO ┃ ┗━━直接按回车默认选择“==NC==”文件夹处理━━┛ ┃
- echo. ┃ ┃
- echo. ┏------------------------------------------------------------┓
- echo ┣ ★★★★★★====默认选择==NC==处理。====★★★★★★ ┫
- echo. ┗------------------------------------------------------------┛
- echo. ┃ ┃
- echo. ┣========处理后自动在==NC==文件夹内生成N+个刀类文件名========┫
- set /p DJFL=
- echo ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
- echo ┃ ===正在处理...以下为刀具信息!==== ┃
- pushd "==NC==\"
- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1,2* delims=:" %%i in ('findstr /ic:"TOOL NAME = " /c:"(Cutter Name:" /c:"( DIA. = " /c:"( Dia:" /c:"(Tool Name:" *.nc') do (
- if "!%%i!" == "" (
- set "str="
- if "%%k" == "" for /f "tokens=2-6 delims==,)" %%a in ("%%j") do (
- if "%%c" =="" (
- set D=%%a&set "R=%%b"
- ) else set D=%%c&set "R=%%e"
- ) else for /f "tokens=1-6 delims=:) " %%a in ("%%k") do (
- if "%%d" neq "" (
- set D=%%a&set "R=%%d"
- ) else set "str=%%a"
- )
-
- if "!str!" == "" for %%f in (D R) do for /f %%h in ("!%%f!") do (
- set "%%f=%%h"
- for /l %%e in (1 1 6) do (
- if "!%%f:~-1!" == "0" set "%%f=!%%f:~,-1!"
- )
-
- if "!%%f!" neq "0." (
- if "!%%f:~-1!" == "." set "%%f=!%%f:~,-1!"
- if "!%%f!" neq "" set "%%f=%%f!%%f!"
- ) else set "%%f="
- set "str=!D!!R!"
- )
- md "!str!" 2>nul
- 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
- move "%%i" "!str!" 2>nul
- set "%%i=i"
- echo %%i——【!str!】
-
-
- )
- )
- echo ┠──────────────────────────────┨
- echo ┃ ===【刀具分类模拟完成!】=== ┃
- ECHO ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
- pause
复制代码
作者: xxpinqz 时间: 2013-7-2 22:44
本帖最后由 xxpinqz 于 2013-7-2 22:46 编辑
在MOVE之前判断应该没错的,除非有些文件没处理,另外上面的文件名称判断有误,还以为都是用-分割的
或者试试把下面的添加到代码的最后看看:- set "com=dir /b/a-d %%a\*.nc^|findstr /iv ".*A\.nc .*F1\.nc .*R1\.nc""
- for /d %%a in (*) do (
- copy /b "%%a\*A.nc"+ /b "%%a\*F1.nc"+ /b "%%a\*R1.nc" "1-%%a.txt" /y
- for /f "delims=" %%b in ('%com%') do type "%%a\%%~nxb" >> "1-%%a-G.txt"
- )
复制代码
作者: lateol 时间: 2013-7-2 23:44
回复 6# terse
完美运行!谢谢。不知道有些电脑 文件排序好像有问题,顺序有点乱了。不能按文件名排序.我的电脑上OK。
作者: lateol 时间: 2013-7-2 23:47
回复 7# xxpinqz
好像如果该文件夹内不包含有A 的就处理有异常了,就只看到合成一个。
代码 学习了。呵呵
作者: xxpinqz 时间: 2013-7-3 00:03
回复 9# lateol
怪了,测了一下,还真的是一定要有含A的文件,其他的可以。
呵呵,我也不知道原因~~。还是用if判断保险点
作者: lateol 时间: 2013-7-4 23:30
本帖最后由 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
请问一下 红色部分 是什么意思?没能理解透谢谢!
作者: terse 时间: 2013-7-5 00:14
set "f=%%~ni" 将文件名赋值给变量F
set "f=!f:~-2!" 截取文件名后两位
cd.>"1-!str!!s!.txt" 建空文件
"1-!str!!s!.txt"+"%%i" 合并文件
作者: lateol 时间: 2013-7-5 08:55
回复 12# terse
谢谢 明白了 。原来是查找符合 直接定向归类。。。强!
不过我觉得 如果我再添加个其他的特项不是难上加难了?
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |