将来,请展示一些代码,以证明您试图自己解决问题。类似于“这是我的要求。现在为我写或给我找一个工具”的问题在这里通常不太受欢迎。
但部分原因是为了避免进一步的半途而废,部分原因是我喜欢这个挑战,这里有一个混合Batch+JScript脚本的解决方案,它将编写
innerText
将HTML添加到控制台。用.bat扩展名保存它。如果希望输出转到文件,则
batscript.bat htmlfile > outfile.txt
在cmd线。
@if (@CodeSection == @Batch) @then
@echo off & setlocal
if "%~1"=="" goto usage
if not exist "%~1" goto usage
cscript /nologo /e:JScript "%~f0" "%outfile%" < "%~1"
goto :EOF
:usage
2>&1 echo Usage: %~nx0 htmlfile
goto :EOF
@end // end Batch / begin JScript
var htmlfile = WSH.CreateObject('htmlfile');
htmlfile.write('<meta http-equiv="x-ua-compatible" content="IE=9" />');
htmlfile.write(WSH.StdIn.ReadAll());
WSH.Echo(htmlfile.documentElement.innerText);
htmlfile.close();
IE9兼容模式被调用以识别更多的HTML元素类型,同时仍允许Vista兼容。你可以改变
IE=9
到10、11或Edge(如果需要)。
如果您喜欢非混合脚本,还可以构造
htmlfile
使用PowerShell的COM对象。它的执行速度较慢,但代码更简单(尽管有奇怪的.NET方法名)。示例:
.bat脚本:
@echo off & setlocal
if "%~1"=="" goto usage
if not exist "%~1" goto usage
set "htmlfile=%~f1"
set "psCommand="^
$h=new-object -COM htmlfile;^
$h.IHTMLDocument2_write('^<meta http-equiv="x-ua-compatible" content="IE=9" /^>');^
$h.IHTMLDocument2_write(${%htmlfile%});^
$h.documentElement.innerText""
powershell -noprofile -noninteractive %psCommand%
goto :EOF
:usage
echo Usage: %~nx0 htmlfile
goto :EOF
.ps1脚本:
param( $htmlfile = $false )
if (-not (test-path $htmlfile)) {
[console]::Error.WriteLine("Usage: $($MyInvocation.MyCommand.Name) htmlfile")
exit
}
$html = gc $htmlfile | out-string
$hObj = new-object -COM htmlfile
$hObj.IHTMLDocument2_write('<meta http-equiv="x-ua-compatible" content="IE=9" />')
$hObj.IHTMLDocument2_write($html)
$hObj.documentElement.innerText
$hObj.Close()
(.ps1解决方案的用法示例:
powershell .\scriptname.ps1 htmlfile.html
)
因为我这样做是为了个人挑战,这里有一个批量+HTA混合变体,它将
内部文本
未保存到新的记事本窗口,因为我可以。
<!-- : batch portion
@echo off & setlocal
if "%~1"=="" goto usage
if not exist "%~1" goto usage
mshta "%~f0" < "%~1"
goto :EOF
:usage
2>&1 echo Usage: %~nx0 htmlfile
goto :EOF
end Batch / begin HTA -->
<meta http-equiv="x-ua-compatible" content="IE=9" />
<div id="out"></div>
<script>
var fso = new ActiveXObject('Scripting.FileSystemObject'),
osh = new ActiveXObject('WScript.Shell'),
notepad = osh.Exec('notepad');
document.getElementById('out').innerHTML = fso.GetStandardStream(0).ReadAll();
clipboardData.setData('text', document.getElementById('out').innerText);
var waitActive = setInterval(function() {
if (osh.AppActivate(notepad.ProcessID)) {
clearInterval(waitActive);
close(osh.SendKeys('^v'));
}
}, 25);
</script>
我使用HTA来规避浏览器安全性,防止对剪贴板的写访问(就像
html文件
COM对象),并且因为HTA重量较轻,不像
InternetExplorer.Application
COM对象。