【问题标题】:Renaming a Html File based upon content from within the file by using a Batch File使用批处理文件根据文件中的内容重命名 Html 文件
【发布时间】:2016-06-01 13:18:49
【问题描述】:

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

我有大量的 html 文件,例如它们的文件名只是 numbers.html (2345.html)。

在每个 html 文件中都有一行大致如下所示;示例 1 - <span class="term-name">fed up</span>  

示例 2 - <span class="term-name">ventilating</span>  

我怎样才能让批处理文件找到包含<span class="term-name"> 的行,然后将文件重命名为</span>   之后和之前的单词。

在我上面的例子中,它会创建一个名为 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

【问题讨论】:

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


    【解决方案1】:

    你可以试试命令:

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

    这意味着在文件file.html 中找到字符串&lt;span class=\"term-name\"&gt;ventilating&lt;/span&gt;&amp;nbsp;&amp;nbsp;,当然你可以找到任何你想要的字符串。如果此命令成功完成,输出应该是匹配的行。然后您可以通过命令解析单词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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      更多信息请关注README.md

      【讨论】:

        【解决方案3】:

        假设:

        • HTML 文件或文件模式作为命令行参数给出;
        • 匹配行中只有一个标签&lt;span&gt;
        • 结束&lt;/span&gt;标签与相关的开始标签在同一行;
        • 属性class的值不包含&lt;&gt;字符;
        • 每个已处理文件的第一个匹配行将被取走;
        • 可以以不区分大小写的方式处理文件;

        以下代码应该适合您:

        @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 命令。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-05-25
          • 2019-06-08
          • 2014-02-26
          • 1970-01-01
          • 2016-09-11
          • 1970-01-01
          • 2013-06-25
          相关资源
          最近更新 更多