中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-14 18:59
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求助-从一txt文档中提取email地址
楼 主 求助-从一txt文档中提取email地址 发表于 2006-09-25 18:59 ·  IANA 局域网IP(Private-Use)
初级用户
积分 70
发帖 27
注册 2006-09-19 19:23
UID 63080
性别 男
来自 河南
状态 离线
现有一txt文档,想提取其中的email地址
文件如下

[ Last edited by uime on 2006-9-26 at 05:27 ]
附件
email.txt (57.81 KiB, 下载附件所需积分 1 点, 下载次数: 113)
2 发表于 2006-09-25 19:50 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  试试下面的代码:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=2,3 delims==@ " %%i in ('findstr @ email.txt') do (
set var=%%i
set "var=!var:"=!"
echo !var!@%%j
)
pause


[ Last edited by namejm on 2006-9-25 at 19:56 ]
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
3 发表于 2006-09-25 20:03 ·  中国 江苏 苏州 电信
银牌会员
★★★
积分 1,181
发帖 533
注册 2006-08-14 12:54
UID 60484
状态 离线

setlocal ENABLEDELAYEDEXPANSION
for /f "delims== tokens=2" %%i in ('find "@" email.txt') do (set emailtemp=%%i
echo !emailtemp:~0,-5!>>b.txt)
4 发表于 2006-09-25 20:05 ·  中国 江苏 苏州 电信
银牌会员
★★★
积分 1,181
发帖 533
注册 2006-08-14 12:54
UID 60484
状态 离线
早啊,namejm ,发现你手比我快。 = =
5 发表于 2006-09-25 20:13 ·  中国 江苏 苏州 电信
银牌会员
★★★
积分 1,181
发帖 533
注册 2006-08-14 12:54
UID 60484
状态 离线
不过,这句什么意思,我没看懂。

set "var=!var:"=!"

好像不写结果也一样。
6 发表于 2006-09-25 20:37 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
Originally posted by NaturalJ0 at 2006-9-25 20:13:
set "var=!var:"=!"
好像不写结果也一样。

如果不写这一句,那么,xliu@cqnu.edu.cn 这条记录将会在最前面的 x 处带个前引号,我也是后来测试的时候才发现的。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
7 发表于 2006-09-25 21:30 ·  中国 北京 联通
银牌会员
★★★
努力做坏人
积分 1,185
发帖 438
注册 2006-08-28 12:00
UID 61449
来自 北京
状态 离线
for /f "tokens=2 delims== " %x in ('findstr "@" email.txt') do echo %~x
我今后在论坛的目标就是做个超级坏人!!!
8 发表于 2006-09-25 21:56 ·  IANA 局域网IP(Private-Use)
初级用户
积分 70
发帖 27
注册 2006-09-19 19:23
UID 63080
性别 男
来自 河南
状态 离线
谢谢大家

我的问题和5楼的一样
引号好像也不配套啊

如果是同时提取用户名和email呢?
就像:
name email
的格式

[ Last edited by uime on 2006-9-25 at 22:01 ]
9 发表于 2006-09-26 00:31 ·  中国 北京 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
UID 63324
性别 男
状态 离线
Mail名与Mail地址分离:



@rem ==================== SearchMail.Bat ==================
@echo off

for /f "tokens=2 delims== " %%i in ('findstr @ email.txt') do (
for /f "tokens=1,2 delims=@" %%a in ("%%i") do echo %%a %%a@%%b >> Ok_Email.txt
)

Notepad.exe Ok_Email.txt




[ Last edited by redtek on 2006-9-26 at 00:46 ]
10 发表于 2006-09-26 02:32 ·  中国 湖南 娄底 新化县 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
UID 58987
来自 湖南.娄底
状态 离线
强! 顶一个先.
11 发表于 2006-09-26 03:30 ·  中国 湖南 娄底 新化县 电信
银牌会员
★★★
积分 1,218
发帖 485
注册 2006-07-21 21:24
UID 58987
来自 湖南.娄底
状态 离线
仔细看过之后, 才发现9楼朋友的代码提取的内容并不是楼主预期的.

在写代码的过程中发现楼主的网页内容存在错误, 如: 熊明勇、刘玺、dage三个名字后面跟的并不是有效的E-mail地址, 在取E-mail时需要多用一个判断. 整段代码的工作效率是比较低的。写完这段代码, 我神智已经不清醒了, 呵呵~ 也没有进行优化。请大家测试~~~

@echo off
setlocal enabledelayedexpansion
for /f "tokens=5 delims==" %%i in ('findstr /i /c:"WIDTH: 80px" email.txt') do (
set /a one=!one!+1
set num=1
set two=
for /f "tokens=2 delims== " %%a in ('findstr /i /c:"uemail" email.txt') do (
set /a two=!two!+1
if /i "!num!"=="1" (
if /i not "%%a"=="150><INPUT class" (
if /i not "%%i"=="uname></TD>" (
if /i "!one!"=="!two!" (
echo %%i %%~a>>name.txt
set num=
)
)
)
)
)
)
pause

[ Last edited by pengfei on 2006-9-26 at 09:01 ]
12 发表于 2006-09-26 04:16 ·  中国 广东 河源 电信
中级用户
★★
积分 266
发帖 98
注册 2006-04-21 20:29
UID 54223
性别 男
状态 离线
头晕~~
13 发表于 2006-09-26 04:50 ·  IANA 局域网IP(Private-Use)
初级用户
积分 70
发帖 27
注册 2006-09-19 19:23
UID 63080
性别 男
来自 河南
状态 离线
真的不错,谢谢大家的热心,虽然执行了,但是对for语句还是有点模糊

[ Last edited by uime on 2006-9-26 at 05:14 ]
14 发表于 2006-09-26 04:52 ·  中国 广东 广州 移动
新手上路
积分 8
发帖 2
注册 2006-09-25 08:10
UID 63598
性别 男
状态 离线
可能EXCEL处理数量较少的这样的文件比较快!
15 发表于 2006-09-26 05:00 ·  中国 北京 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
UID 63324
性别 男
状态 离线
哇噻~~爽~!!!
论坛跳转: