我正在使用 Lazarus IDE 开发一个工具,它可以启动外部批处理脚本来执行操作(有人告诉我我可以在 Lazarus 本身中实现这些操作,但我坚持使用批处理脚本,因为如果需要的话,我可以在未来更改它们)。一些配置条目被写入文件.ini
。
例如,我有两个用于两种不同语言的脚本(我们将它们称为english.bat
和german.bat
)。使用 Lazarus 中的 TButton,它会更改我.ini
文件中的条目,然后启动一个名为的批处理文件changeLang.bat
,这就是我需要帮助的地方。
我changeLang.bat
应该检查文件中的条目.ini
(有一行(第 3 行)显示lang=ger
或lang=eng
)并启动相应的脚本(if lang=ger
start german.bat
/ if lang=eng
start 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
。