Windows批处理脚本从html文件中查找字符串并将其复制到文本文件

时间:2012-10-19 12:02:44

标签: batch-file

所以,我的html文件包含如下行:

<script data-cfasync="false" type="text/javascript"> fid="RandonString"; v_width=620; v_height=490;</script>

我的任务是找到 fid =“RandomString”,并将“”之间的所有内容复制到文本文件中,而不使用任何外部软件。 RandonString长2-100个字符。

1 个答案:

答案 0 :(得分:4)

这不是那么难,这是一个5行解决方案:

set "x=<script data-cfasync="false" type="text/javascript"> fid="RandonString"; v_width=620; v_height=490;</script>"
set "x=%x:*fid=%"
set "x=%x:";="&rem %
set  x=%x:~2%
echo %x%

对正在发生的事情的解释。

您必须处理5个特殊字符,字符串中的<>="以及用于的&字符修剪尾随数据。

第1-3行: <>都是重定向字符,因此要处理它们,需要将整个变量包围在双引号中({ {1}})。 您不希望将双引号添加到变量本身。

第1行在第一个引号之前设置要设置的变量(“"),第二个之后>要设置的数据(x=“),命令 SET 会识别出引号不包含在变量中。因此,可以设置具有特殊字符的可变数据而不会出错。 (将引号放在变量数据中也会起作用,但会为变量数据添加2个特殊字符,并使处理其他搜索和替换命令变得更加困难。)

第2行下一步是删除<script data-cfasync="false" type="text/javascript"> fid="RandonString"; v_width=620; v_height=490;</script>之前的所有内容,fid匹配*fid之前的所有内容,fid用什么都代替。

第3行下一步是删除=%之后的所有内容,这需要一点点破解。通过将";添加到搜索和替换,可以欺骗命令处理器。 '='告诉命令处理器用以下字符替换="&rem %,但下一个字符是;",这使得前面的set命令成为一个带引号的命令,意味着特殊的{{1} }字符未引用,可以解释它。这基本上将"之后的所有内容放在一个单独的行上,因此搜索和替换命令不会替换&&语句用于确保匹配的";之后的数据不会被解释为命令,并且还意味着将忽略任何重定向字符。

所以命令处理器看到的是:

REM

";设置为set x=="RandonString rem "; v_width=620; v_height=490;</script>

第4行现在我们遇到问题,因为x="RandonString开头,而%x%="都是特殊字符,{ {1}}特别难以匹配。但是,幸运的是我们知道字符串现在以=开头,因此解决方案很简单。我们只是通过告诉命令处理器以第二个字符(当前字符0 = ",字符1当前= =,因此字符2 = =")开始,跳过前两个字符。因此,由于第2行删除了包括=在内的所有内容(包括任何重定向字符),并且第3行删除了包括"在内的所有内容字符串的结尾(包括任何重定向字符),
R = fid。删除所有重定向字符后,根本不需要引用该变量。

第5行只需回显变量";