Parsing 分析CMD中带引号的行
如何修复此错误Parsing 分析CMD中带引号的行,parsing,batch-file,for-loop,cmd,Parsing,Batch File,For Loop,Cmd,如何修复此错误 @echo off Setlocal EnableDelayedExpansion REM LINES FOR TEST: REM <td><span><span>41</span><span style="display: none;">111</span><div REM style="display: none;">190</div><span clas
@echo off
Setlocal EnableDelayedExpansion
REM LINES FOR TEST:
REM <td><span><span>41</span><span style="display: none;">111</span><div
REM style="display: none;">190</div><span class="" style="">.</span><span>197</span><span
REM style="display: none;">24</span><span></span>.<span style="display:
REM inline;">132</span><span style="display: none;">39</span>.<span
REM style="display: inline;">186</span></span></td>
SET line=inline;">132</span><span style="display: none;">39</span>.<span
FOR /F "tokens=1-20 delims=<>" %%A IN (%line%) DO (
echo A:%%A + B:%%B + C:%%C + D:%%D + E:%%E + F:%%F + G:%%G + H:%%H + I:%%I + J:%%J + K:%%K + L:%%L
FOR %%? in ( "%%A", "%%B", "%%C", "%%D", "%%E", "%%F", "%%G", "%%H", "%%I", "%%J") DO (
SET $=%%?
echo $:!$!
)
pause
)
@echo关闭
Setlocal EnableDelayedExpansion
REM测试线:
雷姆41111190.19724.13239.186
设置行=内联;“>13239.非预期
编辑:
I tried this:
SET line=inline;">132</span><span style="display: none;">39</span>.<span
FOR /F usebackq^ tokens^=1-20^ delims^=^>^< %%A IN (^"%line%^") DO (
echo A:%%A + B:%%B + C:%%C + D:%%D + E:%%E + F:%%F + G:%%G + H:%%H + I:%%I + J:%%J + K:%%K + L:%%L
FOR %%? in ( "%%A", "%%B", "%%C", "%%D", "%%E", "%%F", "%%G", "%%H", "%%I", "%%J") DO (
SET $=%%?
echo $:!$!
)
pause
)
我试过这个:
在(^“%line%^”)DO中设置line=inline;“>13239.^<%A(
回声A:%%A+B:%%B+C:%%C+D:%%D+E:%%E+F:%%F+G:%%G+H:%%H+I:%%I+J:%%J+K:%%K+L:%%L
对于%%?在(“%%A”、“%%B”、“%%C”、“%%D”、“%%E”、“%%F”、“%%G”、“%%H”、“%%I”、“%%J”)中(
设置$=%%?
echo$:!$!
)
暂停
)
错误:
系统找不到内联文件“>132
另一个测试-我将行移动到文件中,没有错误
(html_2.txt)中/F“delims=“%%”的DO(
回声%%?
对于/F“tokens=1-20 delims=>和code>
是重定向操作符,您需要对它们进行转义:^>尝试以下操作:
FOR/F“tokens=1 delims=“%%A IN(html_2.txt)DO(
设置a=%%a
设置a=!a:=\q!
回声a=!a!
对于/F“tokens=1-26 delims=“%%a in(“!a!”)DO(
设置a=%%a&echo$:!a:\q=“!”!
设置b=%%b&echo$:!b:\q=“!”!
设置c=%%c&echo$:!c:\q=“!
设置d=%d&echo$:!d:\q=“!”!
set e=%%e&echo$:!e:\q=“!
设置f=%%f&echo$:!f:\q=“!”!
set g=%%g&echo$:!g:\q=“!
设置h=%%h&echo$:!h:\q=“!”!
快速眼动重复至z
)
暂停
)
以下是Skip R代码的缩写版本:
@echo off
Setlocal EnableDelayedExpansion
FOR /F "tokens=1 delims=" %%A IN (html_2.txt) DO (
set a=%%A
set a=!a:"=\q!
echo a=!a!
FOR /F "tokens=1-26 delims=<>" %%A in ( "!a!" ) DO (
FOR %%Z in ( %%A, %%B, %%C, %%D, %%E, %%F, %%G, %%H, %%I, %%J) DO (
set z=%%Z
echo !z:\q="!
)
)
pause
)
@echo关闭
Setlocal EnableDelayedExpansion
对于/F“tokens=1 delims=“%%A IN(html_2.txt)DO(
设置a=%%a
设置a=!a:=\q!
回声a=!a!
对于/F“tokens=1-26 delims=“%%A in(“!A!”)DO(
对于%%Z in(%%A、%%B、%%C、%%D、%%E、%%F、%%G、%%H、%%I、%%J),请执行以下操作(
设置z=%%z
echo!z:\q=“!”!
)
)
暂停
)
问题不在FOR/F
循环中。问题在于变量line
在FOR/F…in(^“%line%^”)中的扩展
在此处使用延迟扩展,或者最好从文件中读取内容
这将在不考虑感叹号或插入符号的情况下处理您的问题
@echo off
setlocal EnableDelayedExpansion
FOR /F "tokens=1-26 delims=<>" %%A IN (html_2.txt) DO (
echo a=%%A
echo b=%%B
echo c=%%C
echo d=%%D
echo e=%%E
rem ...
echo z=%%Z
)
@echo关闭
setlocal EnableDelayedExpansion
对于/F“tokens=1-26 delims=“%%A IN(html_2.txt)DO(
回声a=%%a
回声b=%%b
回声c=%%c
回声d=%%d
回声e=%%e
雷姆。。。
回声z=%%z
)
保留感叹号和插入符号后,您需要切换延迟扩展模式,并将值保存在临时变量中。
要禁用EOL字符,我将其设置为delims之外的字符
@echo off
setlocal DisableDelayedExpansion
FOR /F "tokens=1-26 EOL=< delims=<>" %%A IN (html_2.txt) DO (
set "paramA=%%A"
set "paramB=%%B"
set "paramC=%%C"
rem ...
set "paramZ=%%Z"
setlocal EnableDelayedExpansion
echo a=!paramA!
echo b=!paramB!
echo c=!paramC!
rem ...
echo z=!paramZ!
endlocal
)
@echo关闭
setlocal DisableDelayedExpansion
对于(html_2.txt)中的/F“tokens=1-26 EOL=
使用html_2.txt进行测试:
<td><span><span>41</span><span style="display: none;">111</span><div
style="display: none;">190</div><span class="" style="">.</span><span>197</span><span
style="display: none;">24</span><span></span>.<span style="display:
inline;">132</span><span style="display: none;">39</span>.<span
style="display: inline;">186</span></span></td>
41111190.19724.13239.186
是否无法更改for命令的行为以使字符串不是作为命令而是作为字符串?我已转义,但错误仍然存在:SET line=inline;“^>132^^39^。^SET line=inline;“^>132^^39^.^错误:$:%?系统找不到文件§:?§u§?§System\GnuWin\bin。按任意键continuedelims=未转义,对于%line%,您甚至可能需要双转义(^^^>)例如,正如您所看到的,批处理文件不是处理HTML的最佳选择…我不确定%%?是否合法嘿,它起作用了!q=删除了qoutes吗?谢谢,谢谢。我原以为没有人会帮我解决这个问题。但您确实这样做了。最初设置a=!a:=\q!
删除了输入行上的所有双引号。!a:\q=”!
在输出之前转换回来。每行最多13个html标记。@输入中的John感叹号:我想您需要一个带DELIMS=!
的读通(第1步)!
来重写文件,然后用上面的代码(第2步)处理该文件。@Skip R-抱歉,您的代码是胡说八道的!您可以删除set a=!a:“=\q!
也会起作用(更好!)。感叹号处理也不正确。@jeb“胡说八道”不是构造性的。删除双引号需要哪个位?set a=!a:=\q!
需要哪一位才能删除双引号(dquotes)从输入文件数据中,如果不执行此代码> /f
将对数据进行不正确的分析。请参阅OP代码中的第五代码> REM < /代码>行。文件中的数据将不会解析和拆分<代码> > 132。
<td><span><span>41</span><span style="display: none;">111</span><div
style="display: none;">190</div><span class="" style="">.</span><span>197</span><span
style="display: none;">24</span><span></span>.<span style="display:
inline;">132</span><span style="display: none;">39</span>.<span
style="display: inline;">186</span></span></td>