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

[文本处理] [已解决]批处理如何从以下格式文件得到指定的格式?

[复制链接]
发表于 2012-6-13 20:29:25 | 显示全部楼层 |阅读模式
是处理url用的,大概有400万行,原本想用excel筛选功能,手动处理,累一点就累一点吧,结果excel不支持这么多行,我晕。
需要处理的格式如下:
  1. http://www.baidu.com/957
  2. http://www.baidu.com/4759
  3. http://www.baidu.com/?page=14
  4. http://www.baidu.com/archive/123
  5. http://www.baidu.com/archive/asd
  6. http://www.baidu.com/category/232
  7. http://www.baidu.com/category/lalala
  8. http://www.baidu.com/entry/1223
  9. http://www.baidu.com/entry/aaa
  10. http://www.baidu.com/unknow-----------------------(这里的unknown表示无特征英文字母)
  11. http://www.baidu.com/111%3Fxxx
复制代码
想要用批处理,有3种需求:

需求1:只保留这样的url
  1. http://www.baidu.com/957
  2. http://www.baidu.com/4759
复制代码
需求2:只保留这样的URL
  1. http://www.baidu.com/archive/123
  2. http://www.baidu.com/archive/asd
复制代码
需求3:只保留这样的URL
  1. http://www.baidu.com/category/232
  2. http://www.baidu.com/category/lalala
复制代码
需求2、3估计很好实现,最重要的是需求1。。。

不管结果如何,先谢过所有看过此贴的朋友。

评分

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

查看全部评分

发表于 2012-6-13 20:40:32 | 显示全部楼层
本帖最后由 CrLf 于 2012-6-13 21:25 编辑
  1. @echo off
  2. findstr /x "http://[^/]*/[0-9]*" url.txt>1.txt
  3. findstr /x "http://[^/]*/archive/.*" url.txt>2.txt
  4. findstr /x "http://[^/]*/category/.*" url.txt>3.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
llsilver + 1 谢谢

查看全部评分

 楼主| 发表于 2012-6-13 21:21:59 | 显示全部楼层
回复 2# CrLf
谢谢斑斑,如果网址不是只有baidu.com
如果还有21.cn
google.com.hk
cctv.cn
sina.com.cn
这样的呢,又该如何写?
呵呵,得寸进尺了
发表于 2012-6-13 21:24:19 | 显示全部楼层
回复 3# llsilver


    代码已修改,建议以后在顶楼将要求一次性说清,避免绕弯子。
 楼主| 发表于 2012-6-13 21:43:05 | 显示全部楼层
回复 4# CrLf
谢谢斑斑,下次一定注意
发表于 2012-6-14 19:18:04 | 显示全部楼层
我觉得自己挺有创造性的,这样都可以泡制出来

@echo off
setlocal enableDelayedExpansion
for /f "tokens=*" %%i in ('findstr /v "page" url.txt') do (
        set a=%%i&set "a=!a:/= !"
        for %%j in (!a!) do (
        if "%%j"=="archive" echo %%i>>2.txt
        if "%%j"=="category" echo %%i>>3.txt
        set /a b=%%j+0 2>nul
        if "!b!" gtr "0" echo %%i>>1.txt
        )
)
发表于 2012-6-14 19:25:12 | 显示全部楼层
回复 2# CrLf


    大侠,[^/]代表是什么? 我看了cmd里的解释,什么补字符集,理解起来很头痛啊,有没有通俗易懂的说法?
发表于 2012-6-14 20:11:41 | 显示全部楼层
回复 7# poter


见:http://bbs.bathome.net/viewthread.php?tid=14682
假如将数字看作字符集下的一个集合,那么数字集的补集就是所有非数字字符,findstr 中的 [0-9] 匹配的是一个阿拉伯数字,比如 0,那么 [^0-9] 的意思(前者的补集)就是一个不是阿拉伯数字的字符,比如 b
发表于 2012-6-14 20:42:39 | 显示全部楼层
回复 8# CrLf


    原来是这样,那儿[^/]就代表所有非特殊符号的集合咯?

十分感谢!!
发表于 2012-6-14 20:45:39 | 显示全部楼层
回复 9# poter


    [^/] 代表除 / 之外的所有字符,因为 url 以 / 分节,所以 [^/]* 能够匹配一整节的内容
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 06:03 , Processed in 0.020281 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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