找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27789|回复: 4

[文件操作] [已解决]批处理如何提取htm文件里的指定内容/字符串来重命名该文件?

[复制链接]
发表于 2016-5-13 12:41:42 | 显示全部楼层 |阅读模式
这里有几个文件。我自己有两千个。是下载的htm文件。
想提取部分字段来重命名htm。标题和作者字段,格式是,“标题--作者”,作者之间用逗号分隔。
原件中,标题有时候涉及到换行。作者也有两三行的可能。
谢谢!
http://pan.baidu.com/s/1dE7xjih

评分

参与人数 1PB -6 收起 理由
pcl_test -6 勿发笼统的标题

查看全部评分

发表于 2016-5-13 15:14:21 | 显示全部楼层
试试
  1. @if (0)==(0) echo off
  2. for /f "delims=" %%i in ('dir /b *.htm^|cscript //nologo //e:jscript "%~f0"') do ren %%i
  3. pause & exit
  4. @end

  5. var getContent = function(strFile){
  6.     var ado = new ActiveXObject('ADODB.Stream');
  7.     ado.Type = 2;
  8.     ado.Charset = 'UTF-8';
  9.     ado.Open();
  10.     ado.LoadFromFile(strFile);
  11.     var s = ado.ReadText(-1);
  12.     var title = s.match(/<title>(.+)<\/title>/i)[1];
  13.     var author = [];
  14.     var reg = /'color:#003300'>(.+?)</ig;
  15.     while(arr = reg.exec(s)){author.push(arr[1])}
  16.     ado = null;
  17.     return (title + '--' + author).replace(/[\/\\|*?<>":]/g, '')
  18. }

  19. while(!WSH.StdIn.AtEndOfStream){
  20.     var f = WSH.StdIn.ReadLine();
  21.     var ext = f.replace(/.+(\.html?)$/i, '$1');
  22.     WSH.Echo('"' + f + '" "' + getContent(f) + ext + '"');
  23. }
复制代码

评分

参与人数 1技术 +1 收起 理由
lxh623 + 1 谢谢!

查看全部评分

 楼主| 发表于 2016-5-13 18:04:49 | 显示全部楼层
试试
WHY 发表于 2016-5-13 15:14

谢谢了。我这里还是不行,运作一下,就说打不开'ADODB.Stream',停止了。
发表于 2016-5-13 20:24:42 | 显示全部楼层
本帖最后由 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
  1. @echo off & setlocal enabledelayedexpansion
  2. set "reg=(?<=<title>).+(?=</title>)|(?<='color:#003300'>).+?(?=<)"

  3. for /f "delims=" %%i in ('dir /b *.htm') do (
  4.     set "newName="
  5.     for /f "delims=" %%j in ('win_iconv -c -f utf8 -t gb2312 "%%i" ^| grep -ioP "%reg%"') do (
  6.         if not defined newName (set newName=%%j--)else set "newName=!newName!%%j,"
  7.     )
  8.     for %%j in (/ \ : ^| ^< ^> ^") do set "newName=!newName:%%j=!"
  9.     set "newName=!newName:?=!"
  10.     ren "%%i" "!newName:~0,-1!%%~xi"
  11. )
  12. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
lxh623 + 1 这个更好,基本上80-90都可以啦。

查看全部评分

发表于 2016-5-13 20:35:44 | 显示全部楼层
本帖最后由 WHY 于 2016-5-14 23:11 编辑

win7 及以上系统也可以这样,可读性差了点
  1. @echo off
  2. set "r1=(?i)<title>(.+)</title>"
  3. set "r2=(?i)''color:#003300''>(.+?)<"

  4. 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 '[/\\|*?<>:"]')}"
  5. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
lxh623 + 1 谢谢!祝您幸福!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 20:30 , Processed in 0.021428 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表