标题: [文本处理] 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- @echo off
- setlocal enabledelayedexpansion
- md Newfiles
- for %%i in (abc.html) do (
- (for /f "delims=" %%a in ('type "%%i"') do (
- set "str=%%a"
- echo,!str:[title]abc[/title]=测试页面1!
- ))>"Newfiles\%%i"
- )
- for %%i in (def.html) do (
- (for /f "delims=" %%a in ('type "%%i"') do (
- set "str=%%a"
- echo,!str:[title]def[/title]=测试页面2!
- ))>"Newfiles\%%i"
- )
复制代码
作者: 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
- @echo off
- pushd "%~sdp0"
- setlocal enabledelayedexpansion
- set/a a=0,e=0
- (for /f "delims=" %%a in (abc.html) do (
- set q=%%a
- set w=!q:^<title^>=!
- if !w! neq !q! (
- set a=1
- )
- if !a!==1 (
- set e=!q:^</title^>=!
- if !e! neq !q! (
- echo;^<title^>测试页面1^</title^>
- set a=0
- )
- ) else (
- echo;%%a
- )
- ))>new_abc.html
-
- (for /f "delims=" %%a in (def.html) do (
- set q=%%a
- set w=!q:^<title^>=!
- if !w! neq !q! (
- set a=1
- )
- if !a!==1 (
- set e=!q:^</title^>=!
- if !e! neq !q! (
- echo;^<title^>测试页面2^</title^>
- set a=0
- )
- ) else (
- echo;%%a
- )
- ))>new_def.html
-
- pause
- 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- @echo off
- chcp 65001
- call :xxx "abc.html" "[title]abc[/title]" "测试页面1"
- call :xxx "def.html" "[title]def[/title]" "测试页面2"
- exit /b
-
- :xxx
- (for /f "delims=" %%i in ('type "%~1"') do (
- set "s=%%i"
- setlocal enabledelayedexpansion
- set "s=!s:%~2=%~3!"
- echo;!s!
- endlocal
- )) > "new_%~1"
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |