(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= "' 每一行。 这似乎输出了“”第一次出现的任何内容,例如每当读取此行时:&lt;tr&gt;&lt;td valign="top"&gt;&lt;img src="/icons/folder.gif" alt="[DIR]"&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="example.com/page"&gt;0ad9fabf-a3da-4279-9..&amp;gt;&lt;/a&gt;&lt;/td&gt;&lt;td align="right"&gt;2020-04-24 12:39 &lt;/td&gt;&lt;td align="right"&gt; - &lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; 它输出“top”而不是“example.com/page”... ? 不是2delims 而是tokens=2 tokens=2 delims= 之间没有空格,因为我们没有使用双引号,无论如何,请看更新。我推荐使用 powershell 脚本,因为它比 batch 更强大

以上是关于(Batch) 如何在 href="" 中获取文本?的主要内容,如果未能解决你的问题,请参考以下文章

Maven "Generating project in Batch mode"问题的解决 (转)

如何编写batch判断是不是有字符串

"Batch,Batch,Batch":What does it really mean?

batch批处理 文件如何进行 跨盘符切换?

Spring Batch - 如何将字符串从文件转换为日期?

如何按顺序批量打印PDF\WORD\EXCEL格式的文件 混合打印500多个文件?