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

[文本处理] BAT脚本如何批量修多个指定html文件的title

[复制链接]
发表于 2022-2-23 16:58:12 | 显示全部楼层 |阅读模式
本帖最后由 b2006771 于 2022-3-3 18:21 编辑

假设我将bat放在A文件夹,A文件夹中有“abc.html”及“def.html”两个文件,希望将“abc.html”里的“[title]abc[/title]”修改为中文“[title]测试页面1[/title]”,将“def.html”里的“[title]def[/title]”修改为中文“[title]测试页面2[/title]”。
 楼主| 发表于 2022-2-23 16:58:50 | 显示全部楼层
求大神写一个
发表于 2022-2-23 17:23:07 | 显示全部楼层
本帖最后由 yakeyun 于 2022-2-23 17:36 编辑

回复 1# b2006771
bat记得保存为ANSI格式,不然替换可能会导致乱码。
参考位置:http://www.bathome.net/thread-61632-1-2.html
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. md Newfiles
  4. for %%i in (abc.html) do (
  5.     (for /f "delims=" %%a in ('type "%%i"') do (
  6.         set "str=%%a"
  7.         echo,!str:[title]abc[/title]=测试页面1!
  8.     ))>"Newfiles\%%i"
  9. )
  10. for %%i in (def.html) do (
  11.     (for /f "delims=" %%a in ('type "%%i"') do (
  12.         set "str=%%a"
  13.         echo,!str:[title]def[/title]=测试页面2!
  14.     ))>"Newfiles\%%i"
  15. )
复制代码
 楼主| 发表于 2022-2-24 10:30:36 | 显示全部楼层
回复 3# yakeyun

好像不行。执行以后的确看到新文件夹下有新的文件了,可是打开以后title还是没换,而且中文会乱码,我已经保存为ANSI了
 楼主| 发表于 2022-2-24 10:31:11 | 显示全部楼层
另外能否不在新文件夹创建文件,直接替换原文件?
发表于 2022-2-24 11:13:54 | 显示全部楼层
回复 5# b2006771


创建新文件的目的是避免数据未备份,直接覆盖,如果代码测试正常,直接把代码修改一下替换为源文件即可。如果输出有误,请把资料上传网盘。
发表于 2022-2-24 11:28:52 | 显示全部楼层
  1. @echo off
  2. pushd "%~sdp0"
  3. setlocal enabledelayedexpansion
  4. set/a a=0,e=0
  5. (for /f "delims=" %%a in (abc.html) do (
  6.         set q=%%a
  7.         set w=!q:^<title^>=!
  8.         if !w! neq !q! (
  9.                 set a=1
  10.         )
  11.         if !a!==1 (
  12.                 set e=!q:^</title^>=!
  13.                 if !e! neq !q! (
  14.                         echo;^<title^>测试页面1^</title^>
  15.                         set a=0
  16.                 )
  17.         ) else (
  18.                 echo;%%a
  19.         )
  20. ))>new_abc.html

  21. (for /f "delims=" %%a in (def.html) do (
  22.         set q=%%a
  23.         set w=!q:^<title^>=!
  24.         if !w! neq !q! (
  25.                 set a=1
  26.         )
  27.         if !a!==1 (
  28.                 set e=!q:^</title^>=!
  29.                 if !e! neq !q! (
  30.                         echo;^<title^>测试页面2^</title^>
  31.                         set a=0
  32.                 )
  33.         ) else (
  34.                 echo;%%a
  35.         )
  36. ))>new_def.html

  37. pause
  38. exit
复制代码

评分

参与人数 1技术 +1 收起 理由
b2006771 + 1 代码可用

查看全部评分

 楼主| 发表于 2022-2-24 14:31:55 | 显示全部楼层
回复 7# 路过


感谢大神,替换成功了。但是还有两个问题:
1 html一开始的“<!DOCTYPE html>”会被修改为“锘?DOCTYPE html>”
2 因为不想再做一次覆盖,所以我尝试将代码里输出的新文件修改为源文件本身,会发现不行,源文件会被清空,有解决办法吗?
发表于 2022-2-24 14:39:03 | 显示全部楼层
21行:move "new_abc.html" "abc.html"
38行:move "new_def.html" "def.html"
 楼主| 发表于 2022-2-24 16:38:31 | 显示全部楼层
回复 9# qixiaobin0715


感谢大神
已解决问题1
但问题2还存在 html里面的中文都乱码了 貌似是新保存的html的编码问题 原来好像是utf8bom 用bat保存的是ansi
 楼主| 发表于 2022-3-1 22:10:00 | 显示全部楼层
请问有大神可以帮忙解决吗?
发表于 2022-3-1 22:58:59 | 显示全部楼层
Test.bat,保存格式:UTF-8 without BOM
  1. @echo off
  2. chcp 65001
  3. call :xxx "abc.html" "[title]abc[/title]" "测试页面1"
  4. call :xxx "def.html" "[title]def[/title]" "测试页面2"
  5. exit /b

  6. :xxx
  7. (for /f "delims=" %%i in ('type "%~1"') do (
  8.     set "s=%%i"
  9.     setlocal enabledelayedexpansion
  10.     set "s=!s:%~2=%~3!"
  11.     echo;!s!
  12.     endlocal
  13. )) > "new_%~1"
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 10:04 , Processed in 0.020568 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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