Batch脚本读取data.dat启动server.exe时%cmdline%变量无返回问题
问题原因
当前FOR /F语句配置的tokens=2只会取=分割后的第二段内容,而CMDLINE行的参数中包含多个=符号,会被识别为多段内容,导致%cmdline%仅能取到第一个参数-logfile,后续参数全部丢失。
修复方案
调整FOR /F的参数为tokens=2*,*表示将第二段之后所有内容完整赋值给变量,无需再按=分割;同时补充start命令的空窗口标题参数、给可执行文件路径加引号,兼容路径含空格的场景。
修改后的批处理代码如下:
for /f "tokens=2* delims==" %%i in ('type data.dat ^| findstr "EXENAME="') do set exename=%%i for /f "tokens=2* delims==" %%i in ('type data.dat ^| findstr "EXEPATH="') do set exepath=%%i for /f "tokens=2* delims==" %%i in ('type data.dat ^| findstr "CMDLINE="') do set cmdline=%%i start /normal "" "%exepath%%exename%" %cmdline%
如果需要进一步优化,可以一次性读取配置文件所有字段,减少重复IO:
@echo off for /f "tokens=1* delims==" %%a in (data.dat) do ( set "%%a=%%b" ) start /normal "" "%EXEPATH%%EXENAME%" %CMDLINE%
这个写法会自动把配置文件里键=值格式的所有内容批量设置为环境变量,无需逐行用findstr匹配,容错性更高。
内容的提问来源于stack exchange,提问作者DavSlo
相关产品推荐
相关产品推荐

