Board logo

标题: [文本处理] BAT脚本如何批量修多个指定html文件的title [打印本页]

作者: b2006771    时间: 2022-2-23 16:58     标题: BAT脚本如何批量修多个指定html文件的title

本帖最后由 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]”。
作者: b2006771    时间: 2022-2-23 16:58

求大神写一个
作者: yakeyun    时间: 2022-2-23 17:23

本帖最后由 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. )
复制代码

作者: b2006771    时间: 2022-2-24 10:30

回复 3# yakeyun

好像不行。执行以后的确看到新文件夹下有新的文件了,可是打开以后title还是没换,而且中文会乱码,我已经保存为ANSI了
作者: b2006771    时间: 2022-2-24 10:31

另外能否不在新文件夹创建文件,直接替换原文件?
作者: yakeyun    时间: 2022-2-24 11:13

回复 5# b2006771


创建新文件的目的是避免数据未备份,直接覆盖,如果代码测试正常,直接把代码修改一下替换为源文件即可。如果输出有误,请把资料上传网盘。
作者: 路过    时间: 2022-2-24 11:28

  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
复制代码

作者: b2006771    时间: 2022-2-24 14:31

回复 7# 路过


感谢大神,替换成功了。但是还有两个问题:
1 html一开始的“<!DOCTYPE html>”会被修改为“锘?DOCTYPE html>”
2 因为不想再做一次覆盖,所以我尝试将代码里输出的新文件修改为源文件本身,会发现不行,源文件会被清空,有解决办法吗?
作者: qixiaobin0715    时间: 2022-2-24 14:39

21行:move "new_abc.html" "abc.html"
38行:move "new_def.html" "def.html"
作者: b2006771    时间: 2022-2-24 16:38

回复 9# qixiaobin0715


感谢大神
已解决问题1
但问题2还存在 html里面的中文都乱码了 貌似是新保存的html的编码问题 原来好像是utf8bom 用bat保存的是ansi
作者: b2006771    时间: 2022-3-1 22:10

请问有大神可以帮忙解决吗?
作者: WHY    时间: 2022-3-1 22:58

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"
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2