Windows批处理BAT中实现文本文件字符串替换

作者:

文章目录
  • 适用于替换普通字符串(无空格、特殊符号),代码简洁易理解。 @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批处理文件字符串替换内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: 在Windows批处理(.bat)文件中获取拖入文件信息的各种方法 通过Windows批处理管理Hosts文件实现域名屏蔽与网络访问控制 在Windows批处理中使用通配符搜索文本文件 使用Windows批处理bat实现文件重命名加时间戳 Windows批处理文件执行后中文乱码问题的解决方法
  • 目录
    • 一、基础版(无特殊字符场景)
    • 二、增强版(支持特殊字符 / 空格 / 空行)
    • 三、关键说明
    • 四、使用方法
    • 五、示例

    适用于替换普通字符串(无空格、特殊符号),代码简洁易理解。

    @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
    

    1. 延迟扩展(enabledelayedexpansion)BAT 中变量默认在命令块(())执行前解析,启用延迟扩展后,!变量! 会实时解析,确保每行替换生效。
    2. 处理空行for /f 会忽略空行,通过 findstr /n "^" 给每行加行号(包括空行),再提取行内容,保留原文件空行结构。
    3. 特殊字符转义
      若查找 / 替换字符串含 &、|、<、>,需在 BAT 中用 ^ 转义(如 查找字符串=old^&str);
      含 ! 时,需先禁用延迟扩展读取行,再启用延迟扩展替换。
    4. 编码问题若文件是 UTF-8 编码,需在脚本开头加 chcp 65001 >nul,避免中文乱码;ANSI 编码无需此操作。

    1. 修改脚本中 原文件、查找字符串、替换字符串 三个参数;
    2. 将脚本保存为 .bat 文件,放在目标文本文件同目录;
    3. 双击运行脚本,完成替换(会自动覆盖原文件,建议先备份)。

    假设 test.txt 内容:

    hello old_str
    old_str123
    这是old_str的测试

    运行脚本(查找 old_str,替换为 new_str)后,内容变为:

    hello new_str
    new_str123
    这是new_str的测试

    到此这篇关于Windows批处理BAT中实现文本文件字符串替换的文章就介绍到这了,更多相关Windows批处理文件字符串替换内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • 在Windows批处理(.bat)文件中获取拖入文件信息的各种方法
    • 通过Windows批处理管理Hosts文件实现域名屏蔽与网络访问控制
    • 在Windows批处理中使用通配符搜索文本文件
    • 使用Windows批处理bat实现文件重命名加时间戳
    • Windows批处理文件执行后中文乱码问题的解决方法

    站内搜索