windows - Slet linjer (eller tag) fra HTML-filer ved hjælp af batch-script (.bat) script

Indlæg af Hanne Mølgaard Plasc

Problem



Lad os sige, at jeg har et par HTML-filer, der starter med lignende linjer som denne:


<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> 


Hvad jeg har brug for er at slette nogle af koden fra alle disse filer ved hjælp af Windows Shell (cmd).
Jeg foretrækker en løsning, der sletter mærket Jeg behøver ikke i dette tilfælde <H2> Tag, som ville være unikt i alle filer.


Men fordi som nævnt filerne begynder at ligne en (sandsynligvis lettere) løsning, som tillader mig at fjerne en række linjer, ville det også være o.k.
I dette tilfælde linjer 9 til 11 .


Hvad jeg forsøgte så langt for en fil og fjern linjemetoden:


@Echo OFF

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

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


Jeg ville nok have brug for det modsatte funktionskald på MORE, så jeg kunne først skrive alt før linje 9 i filen og i et andet trin tilføje alt efter linie 11 med kommandoen MORE og >> .


Jeg forsøgte at udvide dette svar: https://stackoverflow.com/a/12737334/4543887
til mine behov, men godt mine kommandolinjefærdigheder er ret grundlæggende.


Jeg ved, at det ville være nemt at bruge for eksempel sed, men jeg er begrænset til cmd.

Bedste reference


Hvis du ikke er interesseret i, at nogle af de indrykningstegninger, der ændres, kan du bruge DOM-metoder i JScript. Det er generelt bedre at objektivere og analysere strukturerede markupdata som HTML, XML, JSON osv. End at hakke og skrabe som flad tekst alligevel. Gem dette med en .bat forlængelse og salt til smag.




@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();


htmlfile COM-objektet er ikke meget godt dokumenteret på Microsofts websted. Men du kan se alle dens egenskaber og metoder ved at gøre


powershell "new-object -COM htmlfile | gm | more"