bat 替换字符串

问题:我有一个painter.ini文件,其中内容有“zh_CN”字符(唯一)。想替换成“en_US”,现在是手动修改保存。想做成批处理自动修改。
诉求:1、批处理.bat在painter.ini文档目录下自动搜索不用绝对路径。
2、替换是循环替换。(如果现在是“zh_CN”运行一次.bat就会替换成“en_US”;若是“en_US”运行一次.bat就会替换成“zh_CN”)
3、处理后(指上面的替换完成并保存后)读取现在文本状态。比如是“zh_CN”或“en_US”显示在DOS窗口
4、注意,painter.ini文件中有“;”分号开头行!替换字符只替换指定字符(“zh_CN”、“en_US”)其他不要动。

谢谢大神了 !!最好做的批处理后面加点注释,方便我后期修改。拜谢!!!

::关闭回显 & 窗口标题
@echo off & title 切换语言 By 依梦琴瑶

::开启环境变量延迟
setlocal enabledelayedexpansion

::设置painter.ini文档所在的主目录,如果直接在脚本所在目录搜索,请直接写一个英文小数点
set IniDir=.

::跳转目录
cd /d "%IniDir%"

::搜索painter.ini文件,包括子目录
for /f "delims=" %%a in ('dir /a-d/s/b painter.ini') do (

    rem 读取搜索到的文件内容,这里for前面加个(,主要用于把此for中执行过程中显示的内容进行输出
    (for /f "eol= delims=" %%b in ('type "%%~a"') do (
    
        rem 设置行内容到Str变量
        set "Str=%%~b"
        
        rem 显示Str变量值,并传递到findstr命令进行查找zh_CN字符串,>nul 2>nul 用于屏蔽反馈提示
        rem &&表示findstr找到指定字符串后要准备执行什么
        echo "!Str!" | findstr /c:"zh_CN" >nul 2>nul && (
        
            rem 显示替换zh_CN为en_US后的Str变量值
            echo !Str:zh_CN=en_US!
            
            rem 设置一个空值的local变量,主要用于后续窗口中文字提示的判断
            set "local="
            
        rem || 表示findstr找不到指定字符串后要准备执行什么
        ) || (
            
            rem 显示Str变量值,并传递到findstr命令进行查找en_US字符串,>nul 2>nul 用于屏蔽反馈提示
            rem &&表示findstr找到指定字符串后要准备执行什么
            echo "!Str!" | findstr /c:"en_US" >nul 2>nul && (
            
                rem 显示替换en_US为zh_CN后的Str变量值
                echo !Str:en_US=zh_CN!
                
                rem 设置一个值为1的local变量,主要用于后续窗口中文字提示的判断
                set "local=1"
                
            rem || 表示findstr找不到指定字符串后要准备执行什么
            ) || (
            
                rem 显示没有相关字符串的Str变量值
                echo !Str!
                
            rem 结束第二次findstr命令的处理过程
            )
            
        rem 结束第一次findstr命令的处理过程
        )
        
    rem 结束第二次for命令的处理过程,并输出上面执行时显示的内容到Ini_tmp$文件
    ))>Ini_tmp$
    
    rem 判断local变量是否被定义值,
    if defined local (
        
        rem 如果被定义就直接在CMD窗口中显示下方一行内容
        echo en_US --^> zh_CN
        
    rem 如果没有被定义
    ) else (

        rem 就显示下方一行内容
        echo zh_CN --^> en_US
        
    rem 结束if判断语句
    )
    
    rem 移动Ini_tmp$,并覆盖搜索到的painter.ini文件,以达到修改的目的
    move /y Ini_tmp$ "%%~a" >nul 2>nul
    
rem 结束第一次for,也就是搜索文件的处理过程
)

rem 暂停脚本
pause



这样的脚本和每行注释,应该能看的明白了吧!

温馨提示:答案为网友推荐,仅供参考