使用批处理(.bat)脚本从HTML文件中删除行(或标记)

时间:2017-09-28 21:07:57

标签: html windows batch-file command-line cmd

让我们说我有几个HTML文件以类似的行开头:

<HTML>
<HEAD>

    <TITLE>Some HTML Page</TITLE>
    <H1>something</H1>
    <A>something else</A>
    <A>something else fsomething else></A>
    <A>End of something</A>

    <H2>Beginning of something else
    text text text....</H2>

</HEAD> 

我需要的是使用Windows Shell(cmd)从所有这些文件中删除一些代码。 我更喜欢一种解决方案,删除我不需要的标签<H2>标签,它在所有文件中都是唯一的。

但是因为如上所述,文件开头是类似的(可能更容易)解决方案,它允许我删除一系列行也将是o.k. 在这种情况下,行 9到11

到目前为止,我尝试过一个文件和删除行方法:

@Echo OFF

Set /A "BL=9"
Set /A "EL=11"
Set /A "Z=%EL%-%BL%"

(Type "inputFile.html" | MORE +%BL%)>"inputFile.html"

我可能需要MORE的Opposite函数调用,所以我可以先将第9行之前的所有内容写入文件,然后在第二步中使用MORE命令追加第11行之后的所有内容,并>> 1}}。

我试图扩展这个答案:https://stackoverflow.com/a/12737334/4543887 根据我的需要,但我的命令行技能非常基本。

我知道使用例如sed会很容易,但我只限于cmd

1 个答案:

答案 0 :(得分:0)

如果您不关心某些标记缩进被更改,您可以在JScript中使用DOM方法。通常更好的客观化和解析结构化标记数据(如HTML,XML,JSON等),而不是破解和删除平面文本。使用.bat扩展名和盐来保存它。

@if (@CodeSection == @Batch) @then
@echo off & setlocal

set "in=test.html"

rem // run JScript hybrid code, passing the HTML content via stdin
<"%in%" cscript /nologo /e:JScript "%~f0"

rem // Exit script.  You're done.  w00p w00p!
goto :EOF

@end // end Batch / begin JScript hybrid code

var DOM = WSH.CreateObject('htmlfile'),
    stdin = WSH.CreateObject('Scripting.FileSystemObject').GetStandardStream(0).ReadAll(),
    trash = {};

// force loading IE11 engine then clear
DOM.write('<meta http-equiv="x-ua-compatible" content="IE=11" />');
DOM.close();

// load HTML into the IE11 engine and manipulate
DOM.write(stdin);
trash = DOM.getElementsByTagName('h2')[0];
trash.parentNode.removeChild(trash);

// output modified HTML
WSH.Echo(DOM.documentElement.outerHTML);
DOM.close();

Microsoft的网站上没有很好地记录htmlfile COM对象。但是你可以通过

来看到它的所有属性和方法
powershell "new-object -COM htmlfile | gm | more"