2016-06-01 26 views
1

Ich brauche eine Batch-Datei, die eine Textzeile innerhalb einer HTML-Datei liest und dann diesen Dateinamen umbenannt wird, basierend auf was es findet.Umbenennen einer HTML-Datei basierend auf Inhalt aus der Datei mithilfe einer Batch-Datei

Ich habe eine große Anzahl von HTML-Dateien, deren Dateinamen beispielsweise nur Nummern.html (2345.html) sind.

Innerhalb jeder der HTML-Dateien ist eine Zeile, die ungefähr wie folgt aussieht; 1 Beispiel - <span class="term-name">fed up</span>&nbsp;&nbsp;

Beispiel 2-<span class="term-name">ventilating</span>&nbsp;&nbsp;

Wie kann ich möglicherweise die Batch-Datei erhalten Sie die Zeile mit <span class="term-name"> zu finden und dann die Datei auf die Worte umbenennen, die nach und vor </span>&nbsp;&nbsp; ist.

In meinem obigen Beispiel wäre es eine Datei namens ventilating.txt machen und eine andere Datei eingespeist genannt up.txt

Ich habe ein Beispiel, wo es eine Zeile in der Datei wie Description = Mike finden und dann produziert eine Datei namens Mike.txt. (siehe die .bat unten)

Aber ich kann nicht herausfinden, wie man die Wörter von meinen obigen Beispielen auswählt.

@echo off 

for %%i in (%1) do (
    for /f "tokens=2 delims==" %%j in ('findstr /B /I "Description=" "%%i"') do (
    ren "%%i" "%%j.temp_txt" 
) 
) 

ren *.temp_txt *.txt 

Antwort

0

Im Grunde, was Sie wollen, ist ein HTML Parser verwendbar von der Kommandozeile (und so in Bash-Skripte).

Zum Beispiel können Sie einen Blick auf GitHub - ericchiang/pup werfen, die eine cli HTML Parser ist.

Sie können dieses Tool mit Ihrem Beispiel verwenden, wie folgt aus:

$ cat numbers.html | pup 'span.term-name text{}' 

Weitere Informationen über sie in der README.md.

1

Sie können Befehl versuchen:

findstr /c:"<span class=\"term-name\">ventilating</span>&nbsp;&nbsp;" file.html` 

Was bedeutet Zeichenfolge <span class=\"term-name\">ventilating</span>&nbsp;&nbsp; in Datei file.html und natürlich finden Sie eine beliebige Zeichenfolge Sie finden. Die Ausgabe sollte die übereinstimmende Zeile sein, wenn dieser Befehl erfolgreich abgeschlossen wird. Anschließend können Sie das Wort ventilating durch Befehl analysieren:

for /f "tokens=2,3* delims=><" %a in (%t%) do echo %a` 

Wo %t% die passende Zeile Ausgabe von ersten Befehl enthält und %a das Wort Sie wollen.

schließlich der Befehl wie folgt:

for /f "usebackq tokens=2,3* delims=><" %a in (`findstr /c:"<span class=\"term-name\">ventilating</span>&nbsp;&nbsp;" file.html`) do @echo %a` 

Und Sie werden das Wort in der Konsole erhalten. Natürlich können Sie Ihre Datei umbenennen:

rename file.html %a.html 

Außerdem, wenn diese Befehle in Skript verwendet werden, einzelne % durch doppelte % als %%a ersetzt werden sollte.

Bitte lassen Sie mich wissen, wenn eine Frage.

0

Gesetzt:

  • die HTML-Datei oder ein Dateimuster wird als Befehlszeilenargument angegeben;
  • gibt es nur ein Tag <span> in der passenden Zeile;
  • das schließende </span>-Tag befindet sich in derselben Zeile wie das zugehörige öffnende Tag;
  • Der Wert des Attributs class enthält keine < oder > Zeichen;
  • die erste übereinstimmende Zeile jeder verarbeiteten Datei ist zu nehmen;
  • die Datei (en) können ohne Berücksichtigung der Groß- und Kleinschreibung behandelt werden;

der folgende Code sollte für Sie arbeitet:

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 

for %%I in ("%~1") do (
    set "LINE=" 
    for /F delims^=^ eol^= %%J in (' 
     findstr /I /R /C:"<span *class=[^<>]*>..*</span>" "%%~fI" 
    ') do (
     if not defined LINE (
      set "LINE=%%J" 
      setlocal EnableDelayedExpansion 
      set "LINE=!LINE:*<span =!" 
      for /F "tokens=2 delims=<>" %%K in ("!LINE!") do (
       endlocal 
       ECHO ren "%%~fI" "%%K%%~xI" 
      ) 
     ) 
    ) 
) 
endlocal 
exit /B 

Dieses Skript gibt die ren Befehlszeile an die Konsole zu Testzwecken. Um alle Dateien umzubenennen, entfernen Sie den Großbuchstaben ECHO Befehl.