【问题标题】:Extract sublevel domain from a list with Fully Qualified Domain Name addresses?从具有完全限定域名地址的列表中提取子级域?
【发布时间】:2018-09-26 23:23:38
【问题描述】:

大家好,

我正在尝试使用 CMD/batch 从包含完全限定域名地址的自编译 (.txt) 文档中提取子(或二级)域。

示例

FQDN address: www.somethingfunny.com
What i want : somethingfunny.com

FQDN address: something.funny.com
What i want : funny.com

FQDN address: www.somethingfunny.co.uk
What i want : somethingfunny.co.uk

除了搜索/查看并尝试过其他人的代码之外,我还尝试过 FOR /F 循环/迭代“。”期间,并希望我可以简单地以反向/向后搜索顺序执行此操作。但是,我做的(失败的)尝试越多,思考的时间越长,它似乎就越不可能成功(或者至少对我来说)。

我非常清楚有更好的解决方案(脚本/编程语言)来实现这一点,但这是否也意味着使用纯 cmd/batch 来做这样的事情是不可能的?我不确定!

让我们找出...?

(我知道发布一些实际代码会有所帮助,但我很确定它看起来完全是一团糟/笑话,抛开它也会让我尴尬的事实不谈......我很高兴不过要向别人学习!)

【问题讨论】:

  • 批量一切皆有可能! (不是真的,但我有一个待命的解决方案)
  • 嗨约翰肯斯。我可以同意这一点,但找到“方法”是一个(真正的)挑战!我很好奇你会想出什么。提前感谢您的时间和耐心! :-)
  • 所以像for /f "tokens=1,* delims=." %a in (%_FQDN_%) set _secondLevel_=%* 这样的东西应该这样做。让我检查一下……
  • 顺便说一句:如果没有使用tour、阅读How to Askminimal reproducible example,您是如何做到这一点的?
  • 一个非常普遍的误解是,这个网站是用来学习的。相反,我们在这里告诉您为什么您拥有的代码不起作用。至少,一个问题应该包含您到目前为止编写的代码(它不起作用很好;如果它起作用,您就不会在这里),您期望代码做什么,以及代码实际上是在做的。这一切都在Tour 页面上进行了解释。

标签: string batch-file cmd scripting extract


【解决方案1】:

这适用于命令行:for /f "tokens=1,* delims=." %a in ("%_FQDN_%") do set _secondLevel_=%b。将批处理文件中的“%”符号加倍。由于您没有费心发布 MCVE,我将由您来确定批处理文件的外观。

【讨论】:

  • 我不知道这是否适用于我给出的所有示例,但我肯定会尝试一下。一旦我尝试过,我会告诉你是否成功。谢谢你和我一起思考,jwdonahue!
  • 这确实有效。忘记令牌可以使用*。恭喜。
  • @JohnKens,如果不知道它可以工作,我不会发布它,但它实际上并没有解析 OP 指定的输入文件格式。他们应该做一些有用的事情,否则他们什么都学不到。
  • @jwdonahue 很遗憾听到你这么说,但你不知道我在这个特殊案例上花费和/或浪费了多少时间。即使我发布了“我的”看起来很糟糕的代码,你也不会知道、看到或理解我为(试图)实现我想要的东西付出了多少努力。我不是那种想要所有东西都放在盘子上的人,首先我自己没有尝试过任何东西..
  • 没错!因为您没有发布 MCVE,我们无法判断您的技能在哪里,或者您是否真的在这个问题上付出了任何努力。阅读我在 cmets 中提供给您的 OP 的链接。
【解决方案2】:

现在FOR 语句很适合您的目的,可以在下面的示例中使用,其中delims=. 将允许语句忽略这些字符作为空格:

FOR /F "tokens=1,2 delims=." %%G IN ("www.somethingfunny.com") do ECHO %%G %%H

通过使用tokens=1*tokens=1,*,您将处理第一个令牌和第二个+所有后续项目。更多关于ss64的信息。

@ECHO OFF

rem | Configure directories
set "input=C:\Users\Dan\Desktop\List.txt"
set "output=C:\Users\Dan\Desktop\new.txt"

rem | Loop through textfile and save to %output%
for /f "tokens=1,* delims=." %%a in ('type "%input%"') do (echo %%b >> %output%)

goto :EOF

如果有任何功劳归功于 jwdonahue 提醒我在声明中使用令牌系统的高级用法。希望我至少可以对您进行流程方面的教育。

【讨论】:

  • 我必须说约翰肯斯,我真的很欣赏你解释一切到最小细节的方式。我非常感谢您,并将尝试您发布的代码。如果它恰好是我的问题的解决方案,我会投票给你的答案。我还将注意代码是如何工作的。再次感谢您关心他人并拥有一个美好的人! :-)
  • 这具有从输入行中删除前缀“FQDN 地址:”以及第一个虚线字段的优点。我个人更喜欢避免在脚本文件中使用多行代码块。
  • John,如果您将我的示例与您的示例结合起来,而不使用任何多行代码块,我会投赞成票。我建议call :Something
  • 我列出的两种方法都 100% 有效,并且符合其本质。我个人忘记了在令牌系统中使用通配符,所以 @jwdonahue 的更小更紧凑。我将代码切换到他的想法。谢谢你提醒我。
  • 我的两分钱:@JohnKens 做的工作比我做的多,他应该得到官方的答案,如果现在改变它还为时不晚。他最初的想法运作良好,他愿意采纳我的建议。这不像我们中的任何人实际上发明了这些想法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
  • 2015-05-11
  • 2012-09-04
  • 1970-01-01
  • 1970-01-01
  • 2014-08-12
相关资源
最近更新 更多