我想从大文本文件中删除一些文本。 重点是找到一个字符串(html标签)并删除所有文本,直到标签结束。
这就是我试图做的事情:
C:\>type sample.txt | findstr /r /<tag+[^?]+<\/tag>/g
但是它没有用。
答案 0 :(得分:1)
此脚本(使用.bat
扩展名保存)接受一个参数--html文件。它将在控制台中打印(可以重定向到文件)已删除的文件内容 节点。
不确定是否要删除字体标记及其中的内容或仅删除标记:
@if (@X)==(@Y) @end /* JScript comment
@echo off
cscript //E:JScript //nologo "%~f0" %*
exit /b %errorlevel%
@if (@X)==(@Y) @end JScript comment */
var ARGS = WScript.Arguments;
var file=ARGS.Item(0);
var FileSystemObj = new ActiveXObject("Scripting.FileSystemObject");
//var objXMLHTTP = new ActiveXObject("MSXML2.XMLHTTP")
//objXMLHTTP.open("GET", file);
//objXMLHTTP.sent();
var readFile=FileSystemObj.OpenTextFile(file,1);
var content=readFile.ReadAll();
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.6.0");
var oSelection;
xmlDoc.setProperty("SelectionLanguage", "XPath");
xmlDoc.async = false;
xmlDoc.loadXML(content);
if (xmlDoc.parseError.errorCode != 0) {
var myErr = xmlDoc.parseError;
WScript.Echo("You have error " + myErr.reason);
} else {
//WScript.Echo("Before removing <font> nodes:\n" + xmlDoc.xml + "\n");
oSelection = xmlDoc.selectNodes("//font");
oSelection.removeAll();
//WScript.Echo("After removing <font> nodes:\n" + xmlDoc.xml + "\n");
WScript.Echo(xmlDoc.xml);
}
//var doc=objXMLHTTP.responseXML;
//var tags=doc.oXMLDOMElement.getElementsByTagName("font");
//var selection=doc.selectNodes("//font")
//WScript.Echo(tags.Length);
//selection.removeAll()
答案 1 :(得分:1)
这是另一个类似于npocmaka解决方案的选项。它使用htmlfile
COM对象,而不是使用要求HTML严格有效的XML DOM。此方法不需要像XML解析器那样关闭所有标记。缺点是htmlfile
COM对象对代码做了一些奇怪的事情 - 将所有标记名称大写,从参数周围删除引号,删除XHTML-ish <element />
自闭合斜杠等等。但是,修改后的页面仍应呈现相同的内容。
此脚本将覆盖您要修改的文件。
@if (@CodeSection == @Batch) @then
@echo off
setlocal
set "htmlfile=test.html"
cscript /nologo /e:Jscript "%~f0" "%htmlfile%"
goto :EOF
@end // end batch / begin JScript chimera
var DOM = WSH.CreateObject('htmlfile'),
fso = WSH.CreateObject('Scripting.FileSystemObject'),
file = fso.OpenTextFile(WSH.Arguments(0), 1),
html = file.ReadAll(),
doctype = (html.replace(/\r?\n/g,'').match(/<!doctype.*?>/i) || [''])[0];
file.Close();
DOM.write(html);
var del = DOM.getElementsByTagName('font');
for (var i=del.length; --i>-1;)
del[i].parentNode.removeChild(del[i]);
file = fso.CreateTextFile(WSH.Arguments(0), true);
file.Write((doctype ? doctype + '\n' : '') + DOM.documentElement.outerHTML);
file.Close();
DOM.close();