我需要一个批处理文件,该文件读取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
答案 0 :(得分:1)
您可以尝试命令:
findstr /c:"<span class=\"term-name\">ventilating</span> " file.html`
这意味着在文件<span class=\"term-name\">ventilating</span>
中查找字符串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> " 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)
假设:
<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
命令。