批处理取文件中的特定字符串作为文件名

本程序查找文件名中含有; $ +等特殊字符的文件,取出其文件中标签<h2>和</h2>之间的内容,把其作为文件名,替换掉原来的文件名

@echo off 
rem 默认为utf-8编码
Chcp 65001
Setlocal Enabledelayedexpansion 
echo begin > log.txt

 ::取出当前目录和所有子目录下文件名含有; $ +等字符的文件列表存入dir.txt文件中

dir /b /s /on *.html | findstr "[; $ +]" > dir.txt
 

::遍历dir.txt中的每一条文件名

for /f "delims=" %%i in (dir.txt) do (
    set files=%%i
    set name=%%~ni
    set ex=%%~xi      
     ::取出文件中<h2>标签之间的文字,因为含有空格,使用usebackq
    for /f "usebackq eol=@ tokens=3* delims=<>" %%j in (`findstr "<h2>" "!files!"`) do set newname=%%j
      :: 用取出的文字替换文件名          
    for /f "usebackq eol=@ tokens=3* delims=<>" %%j in (`findstr "<h2>" "!files!"`) do set newname=%%j
    ren "!files!" "!newname!!ex!"                
    echo 原文件名 !files! 新文件名:!newname!!ex!>> log.txt
    
)
pause
goto eof