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

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

是处理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。。。

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

评分人数

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

本帖最后由 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

评分人数

TOP

回复 2# CrLf
谢谢斑斑,如果网址不是只有baidu.com
如果还有21.cn
google.com.hk
cctv.cn
sina.com.cn
这样的呢,又该如何写?
呵呵,得寸进尺了

TOP

回复 3# llsilver


    代码已修改,建议以后在顶楼将要求一次性说清,避免绕弯子。

TOP

回复 4# CrLf
谢谢斑斑,下次一定注意

TOP

我觉得自己挺有创造性的,这样都可以泡制出来

@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
        )
)

TOP

回复 2# CrLf


    大侠,[^/]代表是什么? 我看了cmd里的解释,什么补字符集,理解起来很头痛啊,有没有通俗易懂的说法?

TOP

回复 7# poter


见:http://bbs.bathome.net/viewthread.php?tid=14682
假如将数字看作字符集下的一个集合,那么数字集的补集就是所有非数字字符,findstr 中的 [0-9] 匹配的是一个阿拉伯数字,比如 0,那么 [^0-9] 的意思(前者的补集)就是一个不是阿拉伯数字的字符,比如 b

TOP

回复 8# CrLf


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

十分感谢!!

TOP

回复 9# poter


    [^/] 代表除 / 之外的所有字符,因为 url 以 / 分节,所以 [^/]* 能够匹配一整节的内容

TOP

返回列表