能否让dos批处理程序读取配置文件,类似于ini文件?
本人摸索出一套可行的方案。程序及配置文件举例如下。
此文目的有二:为感兴趣的同学抛砖引玉;记录备查。
配置文件:
#配置文件,解析配置变量 |
#配置文件每个设置值一行 |
#可以以“#”添加注释行 |
#行为可以添加“#”注释 |
#文件的路径可以使绝对路径,也可以是相对路径。windows 下,文件的路径必须用“/”而不是“/”表示 |
|
####################################################### |
#通用配置 |
debug=1 |
#osql.exe连接字符串 |
osqlcnstr=-S127.0.0.1,21433 -E -h-1 -n -b -m15 -w 500 |
#bcp.exe连接字符串 |
bcpcnstr=-S127.0.0.1,21433 -T -c |
DBServer = (local) |
Database = testdb |
UID = testuser |
PWD = testpwd |
InputDataDir = ./DATA |
InputDataFile = CONTACTINFO.txt |
DTSLogFile = CVT_USRINFO.log |
####################################################### |
批处理程序:
@echo off |
set debug=0 |
rem 配置文件以 “#”作为 行、行尾 注释符 |
rem 配置项不能包含空格和双引号 |
rem 配置值不能包含双引号 |
rem 去除空行、注释行。注意不能去掉行开始含有空格的行。取%%b,舍弃%%b |
echo. |
echo 环境变量配置如下: |
for /f "eol=# tokens=*" %%a in (%~n0.txt) do ( |
rem echo. |
if %debug%==1 echo debug 1:a=%%a. b=%%b. |
rem 去除行尾注释。取%%m,舍弃%%n |
for /f "delims=# tokens=1*" %%m in ( "%%a" ) do ( |
if %debug%==1 echo debug 2:m=%%m. n=%%n. |
rem 解析配置,去掉空行。取%%x,%%y,舍弃%%z |
for /f "delims== tokens=1,2*" %%x in ( "%%m" ) do ( |
if %debug%==1 echo debug 3:x=%%x. y=%%y. |
if not "%%y" == "" ( |
rem 去掉 配置项 的空白字符。 |
for /f %%k in ( "%%x" ) do ( |
rem 去掉 配置值 的空白字符。 |
for /f "tokens=1*" %%v in ( "%%y" ) do ( |
if "%%w" == "" ( |
echo .%%k.=.%%v. |
set %%k=%%v |
) else ( |
echo .%%k.=.%%v %%w. |
set %%k=%%v %%w |
) |
) |
) |
) |
) |
) |
) |
echo 读取配置完毕. |
echo. |