批处理脚本检查第二行并执行区分大小写的任务

批处理脚本检查第二行并执行区分大小写的任务

我正在使用 Lazarus IDE 开发一个工具,它可以启动外部批处理脚本来执行操作(有人告诉我我可以在 Lazarus 本身中实现这些操作,但我坚持使用批处理脚本,因为如果需要的话,我可以在未来更改它们)。一些配置条目被写入文件.ini

例如,我有两个用于两种不同语言的脚本(我们将它们称为english.batgerman.bat)。使用 Lazarus 中的 TButton,它会更改我.ini文件中的条目,然后启动一个名为的批处理文件changeLang.bat,这就是我需要帮助的地方。

changeLang.bat应该检查文件中的条目.ini(有一行(第 3 行)显示lang=gerlang=eng)并启动相应的脚本(if lang=gerstart german.bat/ if lang=engstart english.bat)。

我唯一的问题是我不确定如何读取.ini文件中的第三行并设置两种情况的条件。我设置了一个脚本,但通过 cmd 启动批处理文件时显示语法错误。这是我的代码:

@echo off
for /f "tokens=1*delims=:" %%G in ('findstr /n "^" conf.ini')

case lang=deu
    start german.bat
    GOTO END_CASE
    
case lang=eng
    start english.bat
    GOTO END_CASE

rem case thrid_option
rem    start thid_option.bat
rem    GOTO END_CASE

:END_CASE
    exit

答案1

我不确定如何读取 .ini 文件中的第三行

case请注意,批处理文件中没有语句。

@echo off
setlocal enabledelayedexpansion
for /f "tokens=2 delims==" %%G in ('findstr "lang=" conf.ini') do (
  echo %%G
  if "%%G"=="eng" (
    start english.bat
    goto :done
    )
  if "%%G"=="ger" (
    start german.bat
    )
    goto :done
  )
  :done
endlocal

进一步阅读

答案2

为什么不?

if(condition) else if(condition) else(condition)

@echo off && setlocal

for /f tokens^=2delims^=^= %%i in ('%__AppDir__%Findstr.exe "lang=" ^<.\conf.ini
   ')do echo=%%~i & if /i "%%~i"=="eng" (echo=call .\english.bat && goto:eng
        )else if /i "%%~i"=="deu" (echo=call .\german.bat && goto:ger
            )else echo\call .\thid_option.bat && goto:3rd
    
echo=If you see this message something has already gone wrong^!!
endlocal & goto :eof 

:eng
echo\I'm in :eng
rem. :: your code ... & endlocal & goto :eof

:ger
echo\I'm in :ger
rem. :: your code ... & endlocal & goto :eof

:3rd
echo\I'm in :3rd
rem. :: your code ... & endlocal & goto :eof

或者使用Findstr与操作员 && ||

@echo off && setlocal

%__AppDir__%Findstr.exe /i "lang=eng" .\conf.ini >nul && (goto :eng) || (
     %__AppDir__%Findstr.exe /i "lang=deu" .\conf.ini >nul && goto :ger) || goto:3rd
    
:eng
echo\I'm in :eng
rem. :: your code ... & endlocal & goto :eof

:ger
echo\I'm in :ger
rem. :: your code ... & endlocal & goto :eof

:3rd
echo\I'm in :3rd
rem. :: your code ... & endlocal & goto :eof

  • 观察:确保 ini 文件中的字符串后面(在“ ”中)没有空格/制表符(或任何不可见字符)lang=eng

相关内容