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

[文本处理] 批处理怎样提取一个文本内容里的不重复行并输出?

[复制链接]
 楼主| 发表于 2011-6-5 23:03:37 | 显示全部楼层
13# chenqldiy

你这是干啥的批处理?我有点看不懂
 楼主| 发表于 2011-6-6 01:16:05 | 显示全部楼层
请高手帮我优化一下,我弄得这个批处理太慢
@echo off
setlocal enabledelayedexpansion
set a=0
echo                   过滤文本重复行只提取不相同行
echo.
set /p wb=输入要处理的文件名:
set /p wb1=输入要保存的文件名:
set wb=%wb:"=%
set wb1=%wb1:"=%

for /f "delims=" %%i in ('type "%wb%"') do (
set a=0
for /f "delims=" %%j in ('type "%wb%"') do if "%%i" == "%%j" (set /a a+=1)
if "!a!" leq "1" echo %%i>>"%wb1%".txt
)
echo                     处理完成
ping /n 2 127.0.1 >nul
goto :eof

评分

参与人数 1PB -2 收起 理由
Batcher -2 请编辑自己的帖子,把代码放到code标签里面 ...

查看全部评分

发表于 2011-6-6 01:21:23 | 显示全部楼层
17# wh1234567


能否学习一下怎样使用code标签?
http://bbs.bathome.net/thread-3473-1-1.html
发表于 2011-6-6 01:24:34 | 显示全部楼层
楼主自己对着改:

  1. @echo off
  2. (for /f "delims=" %%a in (a.txt) do if not defined "%%a" echo %%a&set ""%%a"=a")>b.txt
  3. start b.txt
复制代码
 楼主| 发表于 2011-6-6 01:56:04 | 显示全部楼层
本帖最后由 wh1234567 于 2011-6-6 01:58 编辑

19# batman

回复版主,不是去除重复行,而是要提取不同的行,也就是将包含有重复的行全部去掉,剩下的就是没有重复过的行了,希望帮忙

例如:原文本1:
12
13
22
你好3?
13
12
处理后并输出的文本内容就是:
22
你好3?
发表于 2011-6-6 11:28:02 | 显示全部楼层
还是一个不通用的解:

  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do set /a "_%%a+=1"
  3. (for /f "tokens=1,2 delims==_" %%a in ('set _') do if %%b equ 1 echo %%a)>b.txt
  4. start b.txt

复制代码
发表于 2011-6-6 11:43:59 | 显示全部楼层
本帖最后由 batman 于 2011-6-6 11:47 编辑

  1. @echo off&setlocal enabledelayedexpansion
  2. rem 每行字符间不能有空格,;><&tab以及成对的!字符
  3. set "str= "
  4. for /f "delims=" %%a in (a.txt) do (  
  5.   if "!str: %%a =!" neq "!str!" (
  6.     set "str=!str: %%a =!"
  7.     ) else (
  8.     set "str=!str! %%a "
  9.   )
  10. )   
  11. (for %%a in (%str%) do echo %%a)>b.txt
  12. start b.txt
复制代码
发表于 2011-6-6 12:10:34 | 显示全部楼层
vbs的,应该很通用了:

  1. Set fso = CreateObject("scripting.filesystemobject")
  2. vbstr = fso.OpenTextFile("a.txt").ReadAll()
  3. arr = Split(vbstr, vbCrLf)
  4. For Each str In arr
  5.   If InStr(vbout, str) = 0 Then
  6.     vbout = vbout & str & vbCrLf
  7.     Else
  8.     vbout = Replace(vbout, str, "$@#^&><")
  9.   End If
  10. Next
  11. fso.OpenTextFile("b.txt", 2, True).Write Replace(vbout, "$@#^&><" & vbCrLf, "")
  12. MsgBox "ok"
复制代码
发表于 2011-6-6 14:11:47 | 显示全部楼层

  1. @echo off
  2. (for /f "delims= eol=" %%i in ('"type 1.txt|findstr ".*""') do (
  3.         if not defined %%i (echo;%%i) else call,set "#=%%#%%%%i "
  4.         set "%%i=0"
  5. ))>#
  6. findstr /v /i "%#%" #>2.txt&del #
复制代码
 楼主| 发表于 2011-6-6 14:37:51 | 显示全部楼层
23# batman

处理速度很快,但就是处理后多出了一行
发表于 2011-6-9 14:54:36 | 显示全部楼层
看看学习!学习!
发表于 2011-6-9 14:54:42 | 显示全部楼层
看看学习!学习!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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