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

[文本处理] [已解决] 批处理替换当前目录及子目录下的 .htm 文件字符串

[复制链接]
发表于 2025-9-25 20:23:27 | 显示全部楼层 |阅读模式
本帖最后由 chishingchan 于 2025-9-25 22:16 编辑

当前目录及子目录下的所有 .htm 文件,需要批量替换 charset=GB2312 为 charset=UTF-8,求批处理,谢谢!
发表于 2025-9-25 21:53:41 | 显示全部楼层
回复 1# chishingchan

以下批处代码假设所有被处理的源文件 *.htm 均为 utf-8 编码,其结果文件名为 *.new.htm。如果源文件 *.htm 均为 ansi(gb2312)编码,须修改代码第一行中的 65001 为 936 即可...

  1. @echo off &setlocal &chcp 65001>nul
  2. for /f "delims=" %%F in ('dir /b/s/a-d *.htm') do (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%%F" ') do (
  3.    set "v=%%b" &setlocal enabledelayedexpansion
  4.    if /i "!v:~,6!"=="<meta " (if /i "!v:* charset=!" neq "!v!" (echo,!v:gb2312=utf-8!) else echo,!v!) else echo,!v!
  5.    endlocal ))>"%%~dpF%%~nF.new%%~xF"
  6. pause&exit/b
复制代码

评分

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

查看全部评分

 楼主| 发表于 2025-9-25 22:02:35 | 显示全部楼层
回复 2# aloha20200628


    老大,为什么这次不使用以下语句?
  1. for /r %%F in (*.*) do
复制代码
发表于 2025-9-25 22:15:20 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-9-25 22:50 编辑

回复 3# chishingchan

for %%F in () 句式碰到循环体内产生新文件时,有可能第一个新文件会被计入源文件再处理,而 for /f ... ('dir ...') 句式无此问题...
发表于 2025-9-26 08:20:08 | 显示全部楼层
回复 3# chishingchan


评分

参与人数 1技术 +1 收起 理由
chishingchan + 1 谢谢老大指点!

查看全部评分

 楼主| 发表于 2025-9-26 11:10:19 | 显示全部楼层
回复 4# aloha20200628


    老大,能不能使用覆盖原文件方式或更改后缀方式用上此语句?
  1. for /r %%F in (*.htm) do
复制代码
发表于 2025-9-26 19:26:39 | 显示全部楼层
回复 6# chishingchan

这好像人一旦上了飞机,地上的事只能等人落地再说...
因此要批处脚本替换源文件中的字段,须分两步走,用以下代码即可...

  1. @echo off &setlocal &chcp 65001>nul &md #$ 2>nul
  2. for /f "delims=" %%F in ('dir /b/s/a-d *.htm') do (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%%F" ') do (
  3.    set "v=%%b" &setlocal enabledelayedexpansion
  4.    if /i "!v:~,6!"=="<meta " (if /i "!v:* charset=!" neq "!v!" (echo,!v:gb2312=utf-8!) else echo,!v!) else echo,!v!
  5.    endlocal ))>"#$\%%~nxF"
  6. move /y "#$\*.*">nul &rd "#$" &pause&exit/b
复制代码
如可选用 sed.exe(本坛第三方下载 http://bcn.bathome.net/s/tool/index.html?key=sed 落地即用,与批处脚本同目录)试用以下一行流代码能直接修改源文件,大为简化操作步骤(当然 sed.exe 内部实操也是要分步完成的 )...

  1. for /r %%F in (*.htm) do sed -i "s/ charset=gb2312/ charset=utf-8/ig" "%%F"
复制代码

评分

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

查看全部评分

 楼主| 发表于 2025-9-27 09:41:04 | 显示全部楼层
回复 7# aloha20200628


    生成临时文件再进行替换,还是喜欢上一段
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 07:06 , Processed in 0.027663 second(s), 14 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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