2016-06-01 11 views
1

htmlファイル内のテキスト行を読み取り、そのファイル名に基づいて名前を変更するバッチファイルが必要です。バッチファイルを使用してファイル内のコンテンツに基づいてHtmlファイルの名前を変更

ファイル名がnumbers.html(2345.html)のようなhtmlファイルが多数あります。

各htmlファイルには、おおよそ次のような行があります。例1から<span class="term-name">fed up</span>&nbsp;&nbsp;

例2から<span class="term-name">ventilating</span>&nbsp;&nbsp;

どのように私はおそらく<span class="term-name">を含む行を検索し、</span>&nbsp;&nbsp;後と前にある言葉にファイルの名前を変更するバッチファイルを取得することができます。私の上記の例では

ことだろう、私はそれが説明=マイクのようなファイル内の行を見つけることができる場所の例があり、その後、生成したファイルと呼ばventilating.txtと

up.txt供給と呼ばれる別のファイルを作りますMike.txtというファイル。 (下の.batを参照してください)

しかし私は上記の例から単語を選択する方法を考えることができません。

@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 

答えて

0

基本的に、何が欲しいのは(そのためのbashスクリプトで)コマンドラインから使用可能HTML Parserです。

例えば、GitHub - ericchiang/pupは、cli HTML Parserです。

あなたはこのように、あなたの例では、このツールを使用することができます。それについて

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

詳しい情報をREADME.mdに。

1

あなたがコマンドを試すことができます。ファイル内の文字列file.html<span class=\"term-name\">ventilating</span>&nbsp;&nbsp;を見つけ、そしてもちろん、あなたが望む任意の文字列を見つけることができることを意味し

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

。このコマンドが正常に終了すると、出力は一致する行になります。その後、コマンドによって単語ventilatingを解析することができます%t%は最初のコマンドと%aによってマッチングライン出力が含まれてい

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

がしたい単語です。

最後に、コマンドは次のようすべきであるとして:

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

そして、あなたはコンソール内の単語を取得します。もちろん、あなたがして、ファイルの名前を変更することができます

さらに
rename file.html %a.html 

これらのコマンドは、スクリプト内で使用する場合、単一%%%aとして、二重%に置き換える必要があります。

質問があれば教えてください。

0

と仮定すると:

  • をHTMLファイルまたはファイルパターンは、コマンドライン引数として指定されています。
  • 一致する行に1つのタグ<span>があります。
  • 閉じる</span>タグは、関連する開始タグと同じ行にあります。
  • 属性classの値には、<または>文字は含まれません。
  • それぞれの処理されたファイルの最初の一致する行が取得されます。
  • ファイルは大文字と小文字を区別しない方法で扱うことができます。

次のコードは、あなたのために働く必要があります。

@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 

このスクリプトは、テストの目的のためにコンソールにrenコマンドラインを返します。実際にファイルの名前を変更するには、大文字のECHOコマンドを削除します。

関連する問題