Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing 分析CMD中带引号的行_Parsing_Batch File_For Loop_Cmd - Fatal编程技术网

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>