For loop 解析html文件
我想解析html文件并在html的某些部分查找数字。此脚本的目标是每个令牌获得一个数字。此脚本必须找到属于正确IP地址的号码 这些数字是IP的一部分,但IP并不完整,而是分离为html标记。这就是为什么这项工作很复杂。到目前为止,我有以下代码:For loop 解析html文件,for-loop,batch-file,cmd,For Loop,Batch File,Cmd,我想解析html文件并在html的某些部分查找数字。此脚本的目标是每个令牌获得一个数字。此脚本必须找到属于正确IP地址的号码 这些数字是IP的一部分,但IP并不完整,而是分离为html标记。这就是为什么这项工作很复杂。到目前为止,我有以下代码: @echo off Setlocal EnableDelayedExpansion SET proxy_3=hide_2.htm FOR %%Z IN (hide_2.htm) DO ( FOR /F "tokens=1-20 del
@echo off
Setlocal EnableDelayedExpansion
SET proxy_3=hide_2.htm
FOR %%Z IN (hide_2.htm) DO (
FOR /F "tokens=1-20 delims=<>" %%A IN ('grep -B 1411 -E "</table>" %%Z ^| grep -E ^"^(display^|^^\d\d{1,3}^|country^|^<td^>HTTP^|rightborder^).*$^" ') DO (
echo A:%%A + B:%%B + C:%%C + D:%%D + %%E + %%F + %%G + %%H + %%I + %%J + %%K + %%L
FOR %%? in ( "%%~A", "%%~B", "%%~C", "%%~D", "%%~E", "%%~F", "%%~G", "%%~H", "%%~I", "%%~J") DO (
SET $=%%~?
echo $:!$!
)
pause
)
)
美元-$:标记$variable的值,它应该是第二个循环中不带引号的派生列/标记。在这里,我寻找没有引号的数值。这在最后一个案例中失败了
字符B:。。。D:标记前4个标记/列,其余标记未标记
其中,第581-585行的相关部分为:
A:inline;" + B:132 + C:/span + D:span style="display: none;" + 39 + /span + . +
span + + + +
$:inline;"" "132" "/span" "span
$:style
$:display: none;"" "39" "/span" "." "span
$: "" "
如果您想以颜色查看此部分,请查看此链接:
所以第二个循环中的标记B是132,没有引号。看起来不错。但在第三个循环中,它变为样式
而第二个循环中的第一个令牌是内联的;,第三个循环显示:inline;“132”“/span”
你能解释一下这是怎么可能的吗?我希望第二位成员收到时能看到。我可以成功解析前3个数字,但这是我帮不上忙的。您的问题在于引号的解析。排队的时候
FOR /F "tokens=1-20 delims=<>" %%A IN
然后在内部循环中
FOR %%? in ( "%%~A", "%%~B", "%%~C", "%%~D", "%%~E", "%%~F", "%%~G", "%%~H",...
“%%~G”替换为
“span style=“显示:无;“”
这将被解析为两个标记:
“span style=“显示:
及
没有;“”
(因为“between=和display”在开始时终止,所以none之前的空格变为有效)
类似地,在第三次循环中,也就是您遇到问题的地方,A、B、C和D被等效地分配给
set A=inline;"
set B=132
set C=/span
set D=span style="display: none;"
set E=39
set F=/span
set G=.
现在,很容易忽略的是H的值。仔细检查“A:…”输出行,可以发现H的设置相当于:
(set G=span style="display: none;")
(set H=span )
或
i、 e.H是字符串跨度,后跟一个空格,所以现在是内部循环
FOR %%? in ( "%%~A", "%%~B", "%%~C", "%%~D", "%%~E", "%%~F", "%%~G", "%%~H", "%%~I", "%%~J")
相当于(shell删除,在替换%%vars和解析令牌之前,在后面加上“)
仔细看看它是如何解析的;是字符串,则“”是字符串,嵌入的空间不被视为令牌分隔符,后跟132(还没有空格),“”也是字符串,嵌入的空间不被视为令牌分隔符,后跟/span和其中嵌入的空间再次不被视为令牌分隔符,然后最后是span和空间,因此第一个令牌成为
set ?="inline;"" "132" "/span" "span
接下来,我们将获得“for”解析的一个未记录的特性:引号外的an=被视为一个空格,因此第二个标记是
set ?=style
然后是第三个标记,从“display:none;”开始,然后是“39”然后是“然后是/span然后是”。然后“”然后span,当我们最终遇到一个重要的空格时
set ?="display: none;"" "39" "/span" "." "span
那么最后一个标记是“后跟”“后跟一个未终止的”,所以
简言之,您需要做的是在适当的位置去掉引号。从根本上说,您的问题是第一个标记%%A包含一个不匹配的双引号,这完全破坏了For循环中文本行的解析
set ?="inline;"" "132" "/span" "span
set ?=style
set ?="display: none;"" "39" "/span" "." "span
set ?=" "" ""