
标题: [文件操作] [已解决]批处理如何提取htm文件里的指定内容/字符串来重命名该文件? [打印本页]
作者: lxh623 时间: 2016-5-13 12:41 标题: [已解决]批处理如何提取htm文件里的指定内容/字符串来重命名该文件?
这里有几个文件。我自己有两千个。是下载的htm文件。
想提取部分字段来重命名htm。标题和作者字段,格式是,“标题--作者”,作者之间用逗号分隔。
原件中,标题有时候涉及到换行。作者也有两三行的可能。
谢谢!
http://pan.baidu.com/s/1dE7xjih
作者: WHY 时间: 2016-5-13 15:14
试试- @if (0)==(0) echo off
- for /f "delims=" %%i in ('dir /b *.htm^|cscript //nologo //e:jscript "%~f0"') do ren %%i
- pause & exit
- @end
-
- var getContent = function(strFile){
- var ado = new ActiveXObject('ADODB.Stream');
- ado.Type = 2;
- ado.Charset = 'UTF-8';
- ado.Open();
- ado.LoadFromFile(strFile);
- var s = ado.ReadText(-1);
- var title = s.match(/<title>(.+)<\/title>/i)[1];
- var author = [];
- var reg = /'color:#003300'>(.+?)</ig;
- while(arr = reg.exec(s)){author.push(arr[1])}
- ado = null;
- return (title + '--' + author).replace(/[\/\\|*?<>":]/g, '')
- }
-
- while(!WSH.StdIn.AtEndOfStream){
- var f = WSH.StdIn.ReadLine();
- var ext = f.replace(/.+(\.html?)$/i, '$1');
- WSH.Echo('"' + f + '" "' + getContent(f) + ext + '"');
- }
复制代码
作者: lxh623 时间: 2016-5-13 18:04
试试
WHY 发表于 2016-5-13 15:14 
谢谢了。我这里还是不行,运作一下,就说打不开'ADODB.Stream',停止了。
作者: WHY 时间: 2016-5-13 20:24
本帖最后由 WHY 于 2016-5-14 23:14 编辑
回复 3# lxh623
我这里测试没有你所说的问题,win7 SP1 64bit 中文旗舰版系统
试试下面的代码,需要用到第三方工具
http://batch-cn.qiniudn.com/tool/win_iconv.exe
http://batch-cn.qiniudn.com/tool/2.22/grep.exe- @echo off & setlocal enabledelayedexpansion
- set "reg=(?<=<title>).+(?=</title>)|(?<='color:#003300'>).+?(?=<)"
-
- for /f "delims=" %%i in ('dir /b *.htm') do (
- set "newName="
- for /f "delims=" %%j in ('win_iconv -c -f utf8 -t gb2312 "%%i" ^| grep -ioP "%reg%"') do (
- if not defined newName (set newName=%%j--)else set "newName=!newName!%%j,"
- )
- for %%j in (/ \ : ^| ^< ^> ^") do set "newName=!newName:%%j=!"
- set "newName=!newName:?=!"
- ren "%%i" "!newName:~0,-1!%%~xi"
- )
- pause
复制代码
作者: WHY 时间: 2016-5-13 20:35
本帖最后由 WHY 于 2016-5-14 23:11 编辑
win7 及以上系统也可以这样,可读性差了点- @echo off
- set "r1=(?i)<title>(.+)</title>"
- set "r2=(?i)''color:#003300''>(.+?)<"
-
- PowerShell -c "dir @('*.htm','*.html')|%%{$a=type $_ -encoding utf8;$b=[regex]::match($a,'%r1%').groups[1].value;$c=([regex]::matches($a,'%r2%')|%%{$_.groups[1].value}) -join ',';ren $_ -newName (($b+'--'+$c+$_.Extension) -replace '[/\\|*?<>:\"]')}"
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |