让我们说我有几个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
。
答案 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"