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

[文本处理] [已解决]批处理怎样提取带汉字的行?

[复制链接]
发表于 2011-7-14 05:00:35 | 显示全部楼层 |阅读模式
hnzzxf
将来时的将来时
Yahoho点点
番茄酱林林
不久的忧郁
helei30
chl6595303
zenghuanheng
青萝卜
138112
神经病马甲2010
考的毛也焦了的猴
chrischiong
陈沉43晨尘
热衷的ghh旁观者
蝴蝶点点
ivy娃娃321

如上含有名称的文本,需要删除helei30,hnzzxf,138112这类纯字母汉字的,留下 Yahoho点点,神经病马甲2010,青萝卜,有汉字的。

评分

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

查看全部评分

发表于 2011-7-14 06:06:38 | 显示全部楼层

  1. findstr "[^a-z0-9]" a.txt
  2. pause
复制代码

评分

参与人数 1PB +2 技术 +1 收起 理由
batman + 2 + 1 乐于助人

查看全部评分

发表于 2011-7-14 07:56:17 | 显示全部楼层
本帖最后由 mxxcgzxxx 于 2011-7-14 13:57 编辑

2# lvsehuaxue


符号也会被排除在外,还是计算字节好用,双字节为汉字
试下这个程序。但中文符号也会被认为中文,一行200字,如果想多点字就改FOR/L中的数字,但不要超过3000

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f  "delims=" %%1 in (a.txt) do (
  4.            set b=1
  5.            call :test "%%1"
  6.            if !b!==2 echo %%1
  7.            )
  8. pause>nul
  9. goto :eof

  10. :test
  11. set "var=%~1"
  12. for /l %%i in (0 1 200) do (
  13.    set "var_=!var:~%%i,1!"
  14.    if "!var_!"=="" goto :eof
  15.    if !var_! gtr Z set b=2& goto:eof
  16.    )
  17. goto :eof
复制代码

评分

参与人数 1PB +2 技术 +1 收起 理由
batman + 2 + 1 乐于助人

查看全部评分

发表于 2011-7-14 08:41:23 | 显示全部楼层
本帖最后由 zm900612 于 2011-7-14 13:57 编辑
  1. findstr /rc:"[^ -Z]" a.txt>b.txt
复制代码

评分

参与人数 1PB +5 收起 理由
mxxcgzxxx + 5 乐于助人

查看全部评分

 楼主| 发表于 2011-7-14 09:45:02 | 显示全部楼层
3# mxxcgzxxx


三楼思路很对,但是运行没反应,没有输出文档
发表于 2011-7-14 10:11:44 | 显示全部楼层
  1. sed -n "/[\x21-\x7E][\x80-\xFF]\|[\x80-\xFF][\x21-\x7E]/p" a.txt >b.txt
复制代码

评分

参与人数 1PB +2 技术 +1 收起 理由
batman + 2 + 1 乐于助人

查看全部评分

发表于 2011-7-14 13:11:48 | 显示全部楼层
  1. findstr   "[^A-Z][^a-z][^0-9]" 1.txt >2.txt
复制代码

评分

参与人数 1PB +2 技术 +1 收起 理由
batman + 2 + 1 乐于助人

查看全部评分

发表于 2011-7-14 13:13:39 | 显示全部楼层
4f是什么意思,没有正确输出。
发表于 2011-7-14 13:57:25 | 显示全部楼层
5# jzsgyml

不好意思是我多写了个空格,第16句要改
  1. if !var_! gtr Z set b=2 & goto:eof
  2. 改成
  3. if !var_! gtr Z set b=2& goto:eof
复制代码
发表于 2011-7-14 14:03:17 | 显示全部楼层
8# Hello123World


findstr 的字符顺序里,空格最小,Z是单字符里最大的,其余都是宽字符,所以用 [^ -Z] 这个集合就能找到含有宽字符的行
发表于 2011-7-14 14:46:53 | 显示全部楼层
10# zm900612


注意了,楼主要求的是含有汉字的行,假如我的行为" 。。。。",这也是宽字节是,但不含有汉字。
我觉得用SED的正则比较合适,或者VBS的正则。如CUer的那个代码。
发表于 2011-7-14 15:15:21 | 显示全部楼层
用VBS写了一个
  1. Const ForReading = 1
  2. Dim re,fso,f,strLine,strOut

  3. Set fso = CreateObject("Scripting.FileSystemObject")
  4. Set f = fso.OpenTextFile("1.txt", ForReading ,False)   '文本保存在1.TXT
  5. Set re = New RegExp

  6. re.Pattern = ".*[\u4e00-\u9fa5]+.*"

  7. While Not f.AtEndOfLine
  8.   strLine = f.ReadLine
  9.   If re.Test(strLine) Then
  10.     strOut = strOut & strLine & vbCrLf
  11.   End If
  12. Wend

  13. Set f = fso.CreateTextFile("2.txt", True)
  14. f.Write strOut

  15. Msgbox "保存为2.txt"

  16. Set fso = Nothing
  17. Set f = Nothing
  18. Set re = Nothing

复制代码

评分

参与人数 1PB +2 技术 +1 收起 理由
batman + 2 + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-7-14 17:21:51 | 显示全部楼层
以上均可用,谢谢大家,不同的方法,达到同样的目的!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 17:07 , Processed in 0.023496 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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