In der Zukunft zeigen Sie bitte Code, um zu demonstrieren, dass Sie versucht haben, das Problem selbst zu lösen. Fragen, die ähneln, "Hier sind meine Anforderungen. Jetzt schreibe es für mich oder finde mich ein Werkzeug" werden in der Regel hier nicht gut aufgenommen.
Aber teilweise, um weitere halbe Antworten zu vermeiden und teilweise, weil ich die Herausforderung genoss, hier ist eine Lösung geschrieben als ein Hybrid Batch + JScript Skript, das die innerText
Ihres HTML auf die Konsole schreiben wird. Speichern Sie es mit einer BAT-Erweiterung. Wenn die Ausgabe stattdessen in eine Datei gehen soll, dann batscript.bat htmlfile > outfile.txt
in der cmd-Zeile.
@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 Kompatibilitätsmodus aufgerufen Typen mehr HTML-Element zu erkennen als ohne, während immer noch Vista-Kompatibilität ermöglicht. Sie können IE=9
bei Bedarf auf 10, 11 oder Edge ändern.
Wenn Sie einen Nicht-Hybrid-Skript bevorzugen würden, können Sie auch das htmlfile
COM-Objekt unter Verwendung von Powershell konstruieren.Es ist langsamer auszuführen, aber es ist einfacher Code (ungerade .NET-ish-Methodennamen ungeachtet). Beispiele:
.bat Script:
@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 Script:
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()
(Beispiel der Verwendung der .ps1 Lösung: powershell .\scriptname.ps1 htmlfile.html
)
Und weil ich bin Dies ist für die persönliche Herausforderung, hier ist eine Batch + HTA Hybrid-Variante, die die innerText
ungespeichert in ein neues Editor-Fenster, weil ich kann.
<!-- : 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>
verwendet I HTA Browser-Sicherheit zu verhindern Schreibzugriff auf die Zwischenablage zu umgehen (wie bei dem htmlfile
COM-Objekt geschieht), und weil HTA hat eine geringeres Gewicht und weniger wahrscheinlich als einen unsichtbaren laufenden Prozess, um am Ende als ein InternetExplorer.Application
COM-Objekt
Wenn eine der folgenden Antworten hilfreich war, sollten Sie eine auswählen, die als akzeptiert markiert wird. [Siehe diese Seite] (http://meta.stackexchange.com/questions/5234/) für eine Erklärung, warum dies wichtig ist. – rojo