首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Windows批处理脚本从html文件中查找字符串并将其复制到文本文件中。

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

Stack Overflow用户
提问于 2012-10-19 12:02:43
回答 1查看 2.6K关注 0票数 1

因此,我有一个html文件,其行如下:

代码语言:javascript
运行
复制
<script data-cfasync="false" type="text/javascript"> fid="RandonString"; v_width=620; v_height=490;</script>

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

EN

Stack Overflow用户

回答已采纳

发布于 2012-10-20 21:55:06

这并不难,这里有一个5行的解决方案:

代码语言:javascript
运行
复制
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行通过将第一个引号放在要设置的变量(“x=”)之前,将第二个引号放在要设置的数据(<script data-cfasync="false" type="text/javascript"> fid="RandonString"; v_width=620; v_height=490;</script>)之后,命令 set E 223识别变量中不包含引号。因此,可以在没有错误的情况下设置具有特殊字符的变量数据。(将引号放入变量数据中也可以,但是在变量数据中添加了2个特殊字符,使得处理其他搜索和替换命令更加困难。)

第2行下一步是删除到并包含fid的所有内容,*fid将所有内容匹配到fid=%将其替换为nothing。

第3行下一步是删除";之后的所有内容,这需要进行一点黑客操作。可以通过将="&rem %添加到搜索和替换中来欺骗命令处理器。'=‘告诉命令处理器用以下字符替换;",但下一个字符是",这使前面的set命令成为一个引号命令,并意味着特殊的&字符没有引号,因此可以对其进行解释。这实际上将&之后的所有内容放在单独的行中,因此搜索和替换命令将";替换为nothing。REM语句的存在是为了确保匹配的";之后的数据不会被解释为命令,还意味着任何重定向字符都将被忽略。

因此,命令处理器看到的是:

代码语言:javascript
运行
复制
set x=="RandonString
rem "; v_width=620; v_height=490;</script>

x设置为="RandonString

第4行现在有一个问题,因为%x%="开始,="都是特殊字符,=特别难匹配。但是,幸运的是,我们知道字符串现在以="开始,所以解决方案很简单。我们只需跳过前两个字符,让命令处理器从第二个字符开始(字符0当前= =,字符1当前= ",因此字符2= R)。因此,由于第2行删除了到并包含fid的所有内容(包括任何重定向字符),而第3行将包括";在内的所有内容删除到字符串的末尾(包括任何重定向字符),

%x:~2% = RandonString。删除所有重定向字符后,根本不需要引用变量。

第5行只是回显变量x

票数 4
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12973880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档