::关闭回显 & 窗口标题
@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
这样的脚本和每行注释,应该能看的明白了吧!