大家好,
我正在使用CMD /批处理从其中具有完全合格域名地址的自编译(.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来做到这一点?我不确定!
让我们发现...?
(我知道发布一些实际的代码可能会有帮助,但是我敢肯定,它看起来像是一个完整的烂摊子/开玩笑,抛开一个事实,这也会让我感到尴尬...我很高兴向别人学习!)
答案 0 :(得分:2)
这可在以下命令行中使用:for /f "tokens=1,* delims=." %a in ("%_FQDN_%") do set _secondLevel_=%b
。将批处理文件中的'%'符号加倍。由于您不必费心发布MCVE,因此我将留给您确定批处理文件的外观。
答案 1 :(得分: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可以提醒我在语句中对令牌系统的高级使用。希望我至少可以对您进行培训。