[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]BAT如何实现文本分类并且合并?

本帖最后由 lateol 于 2012-12-1 20:23 编辑

非常感谢各位大神的帮助,我的批处理已经成功一段落。
特别感谢 版主tmplinshi  apang tmplinshi 。还有很多。因你们而成功。

现在小弟还有,两个特别难题,如上题。
第一。
假如我有以下文本:
1111A.TXT 1111B.TXT 1111C.TXT  1111D.TXT
2222A.TXT 2222B.TXT 2222C.TXT 2222D.TXT
3333A.TXT  3333B.TXT  3333C.TXT 3333D.TXT

每个内容里都有如下内容:
(Cutter Name: D12)
(Cutter Name: D4)
(Cutter Name: D8)
(Cutter Name: R0.5)
等不定内容。
批处理如何早到同样如这样的字符串并进行分类。
如文本包含(Cutter Name: D12) 则新建D12文件夹 并移动入内。
包含(Cutter Name: D4)则新建D4文件夹 并移动入内。以此类推。
=================================================
第二:
在新建好的没个文件夹。吧里边的txt按系统顺序进行文本合并?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

不知道是不是这个意思,试一下看
一:
  1. @echo off
  2. for %%a in (D4 D12 D8 R0.5) do (
  3.   for /f "delims=:" %%b in ('findstr /ic:"Cutter Name: %%a" *.txt') do (
  4.     md "%%a" 2>nul
  5.     move "%%b" "%%a\"
  6.   )
  7. )
  8. pause
复制代码
二:
  1. @echo off
  2. for %%a in (D4 D12 D8 R0.5) do (
  3.   pushd "%%a\"
  4.   copy /b *.txt New.txt
  5.   popd
  6. )
  7. pause
复制代码
1

评分人数

    • lateol: 强!不解释(批处理大神)技术 + 1

TOP

回复 2# apang


    强!对! 要的就是这个效果。
对了合并文本的代码可以纠正一下生成出来的文件名吗  如D12的文件夹就 名为D12.TXT.
还有一个情况。就再劳教一个问题:
如要捕捉的字符有些分散。有办法解决么?
如有些内容如下:
(Diameter:D4  Fillet:R0.5) 与 (Cutter Name: D4R0.5) 是一样的。

TOP

回复 3# lateol

第4行 copy /b *.txt New.txt 改成 copy /b *.txt %%a.txt

如要捕捉的字符有些分散。有办法解决么?
如有些内容如下:
(Diameter:D4  Fillet:R0.5) 与 (Cutter Name: D4R0.5) 是一样的。

没弄明白,既有D4又有R0.5,那么你想把它放到哪个文件夹下?

TOP

本帖最后由 lateol 于 2012-11-29 20:27 编辑

回复 4# apang

这也是一个:D4R0.5
我现在把你的代码改成
  1. @echo off
  2. for %%a in (D12R6 D12 D10R5 D10R0.5 D10 D8R4 D8R0.5 D6R3 D6R0.5 D6 D4R2 D4R0.5 D4R0.2 R1.5 D4 D3 D2 D1 R6 R5 R4 R3 R2 R1 R0.5 R0.2 ) do (
  3.   for /f "delims=:" %%b in ('findstr /ic:"Cutter Name: %%a" *.nc') do (
  4.     md "%%a" 2>nul
  5.     move "%%b" "%%a\"
  6.   )
  7. )
  8. pause
复制代码
完美处理。
只是碰到如D10R0.5的,有些文本不是这样的格式(Cutter Name: D10R0.5)
而是(Diameter:D10  Fillet:R0.5)但道理他也是和(Cutter Name: D10R0.5)是一样的。要放在D10R0.5文件夹里一起合并。

TOP

回复 4# apang


    关键是 如像D10R0.5 被(Diameter:D10  Fillet:R0.5) 给隔开了 不知道怎么样,截取它作为D10R0.5.

TOP

  1. @echo off
  2. for %%a in (D12R6 D12 D10R5 D10R0.5 D10 D8R4 D8R0.5 D6R3 D6R0.5 D6 D4R2 D4R0.5 D4R0.2 R1.5 D4 D3 D2 D1 R6 R5 R4 R3 R2 R1 R0.5 R0.2) do (
  3.   for /f "tokens=1,2 delims=DR" %%b in ("%%a") do (
  4.     if "%%c"=="" (set Re=) else set Re=/ic:"Diameter: D%%b  Fillet: R%%c"
  5.   )
  6.   setlocal enabledelayedexpansion
  7.   for /f "delims=:" %%b in ('findstr /ic:"Cutter Name: %%a" !Re! *.nc') do (
  8.     md "%%a" 2>nul
  9.     move "%%b" "%%a\"
  10.   )
  11.   endlocal
  12. )
  13. pause
复制代码
试一下。
不知道"Diameter:D10  Fillet:R0.5"中的冒号是全角还是半角符号
1

评分人数

    • lateol: 太神了。技术称号(为所欲为)。技术 + 1

TOP

回复 7# apang


    OK 解决了 灰常谢谢、

TOP

回复 7# apang

对了 请问红色部分是什么意思?
for /f "tokens=1,2 delims=DR" %%b in ("%%a") do (

    if "%%c"=="" (set Re=) else set Re=/ic:"Diameter: D%%b  Fillet: R%%c"

  )

TOP

回复 9# lateol


delims=DR
以字母D或R作为列分隔符

TOP

返回列表