现在的位置: 首页 > 综合 > 正文

DOS批处理:读取配置文件,格式 与 程序,例子

2017年11月25日 ⁄ 综合 ⁄ 共 1594字 ⁄ 字号 评论关闭

能否让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.

抱歉!评论已关闭.