批量检查并更换string,然后等待一个进程

我需要一个batch file女巫会:

我怎样才能做到这一点?

我用这个代码,但我的结果是: Russian=g_language = English= Russian

 @echo off &setlocal set "search=g_language = Russian" set "replace=g_language = English" set "textfile=user.cfg" set "newfile=user.bak" (for /f "delims=" %%i in (%textfile%) do ( set "line=%%i" setlocal enabledelayedexpansion set "line=!line:%search%=%replace%!" echo(!line! endlocal ))>"%newfile%" del %textfile% rename %newfile% %textfile%` 

Solutions Collecting From Web of "批量检查并更换string,然后等待一个进程"

 @echo off &setlocal set "Russian=g_language = Russian" set "English=g_language = English" set "textfile=user.cfg" set "newfile=user.bak" Call :SwapLang Russian Start "" some.exe Timeout /t 5 Call :SwapLang English Goto :Eof :SwapLang %1 byRef ( for /f "delims=" %%i in (%textfile%) do ( set "line=%%i" setlocal EnableDelayedExpansion If /I "!line:~0,12!" Equ "g_language =" ( echo(!%1! ) Else ( echo(!line! ) endlocal )) > "%newfile%" del %textfile% rename %newfile% %textfile% Goto :Eof 

这里已经给出了很好的答案。

我还没有能够测试这个, (请先在测试环境中试试) ,只有在您觉得您会从稍微不同的方法中受益时才这样做。

 @Echo Off Set "fexe=some.exe" Set "fcfg=user.cfg" Set "fbak=user.bak" Set "sstr=g_language" Set "rlng=Russian" Set "elng=English" If Exist "%fbak%" (If Not Exist "%fcfg%" (Copy "%fbak%" "%fcfg%" ) Else Copy "%fcfg%" "%fbak%") Else If Exist "%fcfg%" (Copy "%fcfg%" "%fbak%" ) Else Exit/B QProcess "%fexe%">Nul 2>&1 &&(FindStr/IC:"%sstr% = %elng%" "%fbak%">Nul||( Call :Sub "%rlng%" "%elng%"))||( FindStr/IC:"%sstr% = %rlng%" "%fbak%">Nul||(Call :Sub "%elng%" "%rlng%" Start "" "%fexe%")) Exit/B :Sub (For /F Delims^= %%A In ('FindStr $ "%fbak%"') Do If /I "%%A"=="%sstr% = %~1" ( Echo %sstr% = %~2) Else Echo %%A)>"%fcfg%" 

我已经这样做了,你只需要检查/调整第3至第8行的项目。

总体思路:

  • 如果user.cfguser.bak存在,则退出。
  • 如果只有一个user.cfguser.bak存在复制到另一个。
  • 如果user.cfguser.bak存在, user.cfg user.bak复制到user.bak
  • 如果some.exe正在运行,而user.cfgg_language不是English则将其改为English
  • 如果some.exe没有运行,并且user.cfgg_language不是Russian请将其更改为Russian并运行some.exe

当然,如果在重新启动user.cfg更改才会生效,那么这些都不重要。