标题: [文件操作] [已解决]批处理怎样根据网页文件<title>间的标题重命名文件? [打印本页]
作者: huzhiqiang91 时间: 2013-7-10 19:33 标题: [已解决]批处理怎样根据网页文件<title>间的标题重命名文件?
我有许多以数字开头的htm文件,如35003.htm,网页的内容是一些文章,是有标题的,如“如何保养电脑与维护”等,
但是网页文件的数字标题对我找寻相关文章很不利,后来我发现在htm文件的源码里,文章的题目都在<title></title>之间,我现在想提取<title></title>之间的文章名并以此重命名该文件,不知代码该怎么写
备注:其实我自己尝试写过,但提取的都带<title></title>,我不想要,但是自己造诣不深搞不定,求高手。注意:我有很多很多这样的文件,希望代码有通用性,谢谢
作者: terse 时间: 2013-7-10 20:09
想看看你是怎么提取的
作者: Python 时间: 2013-7-10 20:39
请把35003.htm压缩一下传上来看看
还有把你的代码也贴出来
我可以帮忙修改
作者: huzhiqiang91 时间: 2013-7-10 23:34
这是我写的代码,- @echo off
- findstr "<title>" "*.htm" >list.txt
- for /f "delims=: tokens=1,2" %%a (list.txt) do (
- ren F:\test\%%a %%b)
- pause
复制代码
这是网页文件,用记事本打开看源码就找到<title></title>间的文章名了,我换了个文件,形式是一样的,内容不一样,
备注:有的文章名有空格或是特殊字符
作者: terse 时间: 2013-7-11 10:22
本帖最后由 terse 于 2013-7-11 12:56 编辑
路径自己补上 特殊字符没测试 空格应该没问题
n参数这里是多余了- @echo off
- set ext=htm
- for /f "tokens=1,3 delims=:<>" %%a in ('findstr /i "<title>.*</title>" *.%ext%') do ren "%%a" "%%b.%ext%"
- pause
复制代码
作者: huzhiqiang91 时间: 2013-7-11 17:01
本帖最后由 huzhiqiang91 于 2013-7-11 17:03 编辑
问题解决了,谢谢terse ,不过我有一个问题- for /f "tokens=1,3 delims=:<>" %%a in ('findstr /i "<title>.*</title>" *.%ext%') do ren "%%a" "%%b.%ext%
复制代码
上面这段代码为什么把- 'findstr /i "<title>.*</title>" *.%ext%
复制代码
的结果:- 33428.htm:<title>windows IE浏览器精典技巧两则_WindowsXP_脚本之家</title>
复制代码
分成了4段,而不是五段,难道33428.htm:<title>冒号和"<"之间无字符段就不算吗,换句话说,是不是在两个分隔符之间无字符是不是就不分割呢、
作者: huzhiqiang91 时间: 2013-7-11 17:12
刚才又大规模试了一下,发现有特殊字符的不行,不过已经解决很大问题了,我觉得在处理前把含有的特殊字符找出来,替换掉应该可以,自己试试吧,再次感谢
作者: CrLf 时间: 2013-7-11 18:47
批处理吧某人的办法是这样,需要用第三方 sed:- @echo off
- set "ext=htm"
- findstr /i "<title>.*</title>" *.%ext%>a.txt
- (
- echo @echo off
- sed "s/\(.*\):.*<title>\([^<]*\)<.*/ren \"\1\" \"\2.%ext%\"/ig" a.txt
- )>a.bat
- call a.bat
- pause
复制代码
作者: PowerShell 时间: 2013-7-13 22:25
本帖最后由 PowerShell 于 2013-7-13 22:42 编辑
我也来凑热闹了 用时,别忘了把f:\txt那块修改了,并把#给取消掉。并备份下源文件- foreach ($a in (Get-ChildItem f:\TXT\aaa\*.htm* -Recurse) )
- {
- $整个标题行 = Get-Content $a | select-string -list -Pattern "<title>.*</title>"
-
- if ($整个标题行 -ne $null)
- {
- $网页最终标题 = $整个标题行 -replace "^.*<title>",""
- $网页最终标题 = $网页最终标题 -replace "</title>.*$",""
- write-host $a.fullname,"---",$网页最终标题
- #Rename-Item $a $网页最终标题
- $整个标题行 = $null
- }
- else
- {
- Write-Warning $a.fullname
-
- }
-
-
-
- }
- #powershell好,语法简单,无需转义,特殊字符处理妙,
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |