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

[文本处理] 批处理BAT如何在一堆URL中提取其每行的一级域名?

倒数4行少个H?
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%a in (a.txt) do (
  3.     set "str=%%a"
  4.     set "str=!str:*:=!"
  5.     set "str=!str::= !"
  6.     for %%i in (!str!) do (
  7.         for /f "delims=/" %%a in ("%%i") do echo,%%a
  8.     )
  9. ))>b.txt
复制代码
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

回复 2# xxpinqz


   谢谢你啦, 我试试。
少个H不影响吧。域名不包含HTTP

TOP

本帖最后由 封印 于 2014-2-17 20:09 编辑

回复 2# xxpinqz


    试了一下,二级域名和三级域名都留了一下。还要把二级和三级域名,提取到顶级域名。
比如:
files.files02.arabsh.co.jp
files.files03.arabsh.com
等,这个类型。
提取到arabsh.com和arabsh.co.jp

TOP

回复 1# 封印


    能不能按照你给的例子  把正确的结果写出来


我对理解你的题意有些偏差

TOP

本帖最后由 封印 于 2014-2-17 21:43 编辑

回复 5# bluewing009

    一个文本里(a.TXT),里面有很多URL。把里面的URL中顶级域名提出来。
比如fifa3.dn.nexoncdn.co.kr,就提取nexoncdn.co.kr。
比如fichiers.touslesdrivers.com,就提取touslesdrivers.com
比如http://visitdelphi.gr/java/tmp/system/NOTA-FISCAL-10.rar,就提取visitdelphi.gr
只要顶级域名。

TOP

顶上去先,让高手看到。

TOP

files.files02.a.b.c
你说我这个域名的顶级域名是 a.b.c 呢?还是 b.c 呢?

TOP

回复 8# DAIC

   这就是需要判断了啊,人工当然可以判断。一般来说是b.c
也有可能是a.b.c

TOP

回复 9# 封印


你需要说清楚如何做人工判断
有规律、有方法,最后转换成代码就行了。

TOP

  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. txt = fso.OpenTextFile("a.txt",1).ReadAll
  3. Set re = New RegExp
  4. pattern = "com|net|org|gov|edu|mil|biz|name|info|mobi|pro|"
  5. pattern = pattern & "travel|museum|int|aero|post|rec|asia"
  6. re.Pattern = "[\w\-]+\.([a-z]{2}|" & pattern & ")(\.[a-z]{2})?(?:\b|/)"
  7. re.IgnoreCase = True
  8. re.Global = True
  9. For Each a in re.Execute(txt)
  10.     str = str & a & vbCrLf
  11. Next
  12. WScript.Echo str
复制代码

TOP

回复 11# apang


    这个VBS没有运行起来。运行完之后是这样子:

TOP

回复 10# DAIC


   好吧,从后往前,开始,可以按结尾的字符个数判断。结尾后六个字符(包含“.”),如co.jp,.com,com.cn。者截取,前一个点为止。
比如。ABC.DEF.CO.JP。截取到DEF.CO.JP。
ABC.DEF.COM.CN,则截取到DEF.COM.CN
也可以把所有域名后缀列个表。然后包含域名中的后缀则截取域名后缀之前的字符串,直到遇到有"."为止。
比如ABC.DEF.COM
后缀列表中有com就可以取DEF.COM
当然,也可以有更好的方法。

TOP

自己都没理顺思路,叫人如何写。这样试试,后面是两字符的取3组,余者取两
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "tokens=1* delims=:" %%a in (a.txt) do (
  3.     set "str=%%b"
  4.     set "str=!str::= !"
  5.     for %%i in (!str!) do (
  6.         for /f "delims=/" %%a in ("%%i") do (
  7.             set "str=%%a"
  8.             set "str=!str:.= !"
  9.             set m=0
  10.             for %%a in (!str!) do (
  11.                 set/a m+=1
  12.                 set "#!m!=%%a."
  13.                 set "tmp=%%a"               
  14.             )
  15.             if "!tmp:~2!"=="" (set/a n=m-2) else set/a n=m-1
  16.             set "e="
  17.             for /l %%a in (!n!,1,!m!) do set "e=!e!!#%%a!"
  18.             echo,!e:~,-1!
  19.         )               
  20.     )
  21. ))>b.txt
复制代码
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

回复 14# xxpinqz


    嗯,这段已经,已经很牛B了。。虽然还有少部分URL没截取成功。但已经无限接近完美了。值得学习。

TOP

返回列表