(Batch) 如何在 href="" 中获取文本?
Posted
技术标签:
【中文标题】(Batch) 如何在 href="" 中获取文本?【英文标题】:(Batch) How to get text inside href=""? 【发布时间】:2020-11-04 13:16:29 【问题描述】:我的源代码中有一个带有href="example.com/page"
的htm 文件,我怎样才能获得“”之间的链接?
到目前为止,我已经尝试过修改这段代码:
@echo off
setlocal EnableDelayedExpansion
set "str="
set "string=stuff href="example.com/page"end morestuff"
set string=!string:href=^
!
set string=!string:end=^
!
FOR /F skip^=1eol^= %%S in ("!string!") do if NOT DEFINED str set "str=%%S"
echo(!str!
pause > nul
但是在第 6 行看来,将 href 更改为 href=" 会破坏代码,并将 end 更改为 " 也破坏了某些东西,想知道是否可以解决此问题或是否有替代方法?
【问题讨论】:
您不能在子字符串替换表达式的搜索字符串中使用等号,因为=
分隔搜索和替换字符串;我会首先使用href
作为搜索字符串,当删除它时(通过set "string=!string:*=href=!"
),我也会使用子字符串扩展来删除=
,例如if "!string:~,1!"=="=" set "string=!string:~1!"
;那么您可以将"
指定为for /F
的分隔符...
【参考方案1】:
我相信你只想要example.com/page
部分:
@echo off
set "string=stuff href="example.com/page"end morestuff"
for /f tokens^=2delims^="" %%a in ("%string%") do set "substr=%%a"
echo %substr%
根据评论从文件中读取:
@echo off
set "file=file.txt"
for /f tokens^=2delims^="" %%a in ('findstr /IRC:"href=" "%file%"') do set "substr=%%a"
echo %substr%
看到您需要从 html 文件中读取,我建议您使用更强大的东西,例如 powershell
。
创建一个扩展名为.ps1
的文件,粘贴内容,确保将文件的路径和文件名放入$file_path
替换file.txt
:
$file_path = 'file.txt'
$rgx = '(?<=href\=").*?(?=">)'
select-string -Path $file_path -Pattern $rgx -AllMatches | % $_.Matches | % $_.Value
现在您可以从cmd
运行它:
powershell -File test_url.ps1
或者直接打开powershell cli并从那里直接运行:
.\test_url.ps1
【讨论】:
我正在搜索的实际文件有更多引号,是否可以将href="
设置为前缀?
好的,你从来没有提到文件,你使用了一个变量。那么您是否要在文件中搜索href=
,然后才打印网址?
是的,差不多,我这样做的原因是正在搜索的文件(HTML)的每一行都被单独搜索,并且有更多的“”(引号)但只有一个 'href= "' 每一行。
这似乎输出了“”第一次出现的任何内容,例如每当读取此行时:<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]"></td><td><a href="example.com/page">0ad9fabf-a3da-4279-9..&gt;</a></td><td align="right">2020-04-24 12:39 </td><td align="right"> - </td><td>&nbsp;</td></tr>
它输出“top”而不是“example.com/page”... ?
不是2delims
而是tokens=2
tokens=2 delims=
之间没有空格,因为我们没有使用双引号,无论如何,请看更新。我推荐使用 powershell 脚本,因为它比 batch
更强大以上是关于(Batch) 如何在 href="" 中获取文本?的主要内容,如果未能解决你的问题,请参考以下文章
Maven "Generating project in Batch mode"问题的解决 (转)
"Batch,Batch,Batch":What does it really mean?