使用批处理文件根据文件中的内容重命名Html文件

时间:2016-06-01 13:18:49

标签: html batch-file batch-processing batch-rename

我需要一个批处理文件,该文件读取html文件中的一行文本,然后根据它找到的内容重命名该文件名。

我有大量的html文件,例如,他们的文件名只是numbers.html(2345.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的文件和另一个名为fed up.txt的文件

我有一个示例,它可以在文件中找到一行,如Description = Mike,然后生成一个名为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

3 个答案:

答案 0 :(得分:1)

您可以尝试命令:

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

这意味着在文件<span class=\"term-name\">ventilating</span>&nbsp;&nbsp;中查找字符串file.html,当然您可以找到所需的任何字符串。如果此命令成功完成,则输出应为匹配行。然后,您可以通过命令解析单词ventilating

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

其中%t%包含第一个命令输出的匹配行,而%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

如果有任何问题,请告诉我。

答案 1 :(得分:0)

基本上,你想要的是HTML Parser可以从命令行使用(在bash脚本中也是如此)。

例如,您可以查看GitHub - ericchiang/pup cli HTML Parser

您可以将此工具与您的示例一起使用,如下所示:

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

README.md中有关它的更多信息。

答案 2 :(得分:0)

假设:

  • HTML文件或文件模式作为命令行参数给出;
  • 匹配行中只有一个标记<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命令。