Windows批处理BAT中实现文本文件字符串替换
作者:专注编程优化20年
在 Windows 批处理(BAT)中实现文本文件字符串替换,核心思路是通过 for /f 逐行读取文件内容,结合字符串替换语法处理每行内容,最后将处理后的内容写入临时文件,替换原文件,以下是完整的实现方案,需要的朋友可以参考下
一、基础版(无特殊字符场景)
适用于替换普通字符串(无空格、特殊符号),代码简洁易理解。
@echo off
setlocal enabledelayedexpansion
:: ===================== 配置参数 =====================
set "原文件=test.txt" :: 要替换的文本文件路径
set "查找字符串=old_str" :: 要替换的旧字符串
set "替换字符串=new_str" :: 替换后的新字符串
:: ====================================================
:: 检查原文件是否存在
if not exist "%原文件%" (
echo 错误:文件 "%原文件%" 不存在!
pause
exit /b 1
)
:: 临时文件(避免覆盖原文件)
set "临时文件=%原文件%.tmp"
:: 逐行读取并替换
del /f /q "%临时文件%" 2>nul :: 删除旧的临时文件
for /f "delims=" %%a in ('type "%原文件%" 2^>nul') do (
set "行=%%a"
:: 替换字符串(!行! 启用延迟扩展,处理变量实时更新)
set "行=!行:%查找字符串%=%替换字符串%!"
:: 写入临时文件(echo. 处理空行)
if "!行!"=="" (echo.) else (echo !行!) >> "%临时文件%"
)
:: 替换原文件
move /y "%临时文件%" "%原文件%" >nul
echo 替换完成!
endlocal
pause
二、增强版(支持特殊字符 / 空格 / 空行)
解决基础版无法处理 &、|、<、>、!、% 等特殊字符,以及空行丢失的问题:
@echo off
setlocal disabledelayedexpansion :: 先禁用延迟扩展,避免!被吞
chcp 65001 >nul :: 可选:设置UTF-8编码(处理中文)
:: ===================== 配置参数 =====================
set "原文件=test.txt" :: 目标文件
set "查找字符串=旧内容&特殊字符" :: 支持含&、空格等
set "替换字符串=新内容|替换" :: 支持含|、!等
:: ====================================================
if not exist "%原文件%" (
echo 错误:文件 "%原文件%" 不存在!
pause
exit /b 1
)
set "临时文件=%原文件%.tmp"
del /f /q "%临时文件%" 2>nul
:: 用findstr逐行读取(保留空行),findstr /n 给每行加行号(避免空行被忽略)
for /f "delims=:" %%i in ('findstr /n "^" "%原文件%"') do (
set "行号=%%i"
setlocal enabledelayedexpansion
:: 提取行内容(去掉行号和冒号)
for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%原文件%" ^| findstr "^!行号!:"') do (
set "行=%%b"
)
:: 处理空行(行号对应内容为空)
if "!行号!"=="1" if not defined 行 set "行="
:: 替换字符串(启用延迟扩展处理!)
set "行=!行:%查找字符串%=%替换字符串%!"
:: 写入临时文件(空行直接echo.)
if defined 行 (echo(!行!) else (echo.) >> "!临时文件!"
endlocal
)
:: 替换原文件(覆盖)
move /y "%临时文件%" "%原文件%" >nul
echo 替换完成(支持特殊字符)!
endlocal
pause
三、关键说明
- 延迟扩展(enabledelayedexpansion)BAT 中变量默认在命令块(
())执行前解析,启用延迟扩展后,!变量!会实时解析,确保每行替换生效。 - 处理空行
for /f会忽略空行,通过findstr /n "^"给每行加行号(包括空行),再提取行内容,保留原文件空行结构。 - 特殊字符转义
若查找 / 替换字符串含&、|、<、>,需在 BAT 中用^转义(如查找字符串=old^&str);
含!时,需先禁用延迟扩展读取行,再启用延迟扩展替换。 - 编码问题若文件是 UTF-8 编码,需在脚本开头加
chcp 65001 >nul,避免中文乱码;ANSI 编码无需此操作。
四、使用方法
- 修改脚本中
原文件、查找字符串、替换字符串三个参数; - 将脚本保存为
.bat文件,放在目标文本文件同目录; - 双击运行脚本,完成替换(会自动覆盖原文件,建议先备份)。
五、示例
假设 test.txt 内容:
hello old_str old_str123 这是old_str的测试
运行脚本(查找 old_str,替换为 new_str)后,内容变为:
hello new_str new_str123 这是new_str的测试
到此这篇关于Windows批处理BAT中实现文本文件字符串替换的文章就介绍到这了,更多相关Windows批处理文件字符串替换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
