中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: bat读取ini文件 上一主题 | 下一主题
blacksheep2000
新手上路





积分 1
发帖 1
注册 2009-11-3
状态 离线
『楼 主』:  bat读取ini文件

对chanell编写的脚本进行改良

@echo off

goto start

:usage

@echo :::::::::INI文件读取 :::::::::::::::::::::::::::::::::::::::::::::

@echo ::使用方法:                                                     ::

@echo ::    inifile iniFilePath [section] [item] [Y]                  ::

@echo ::例子:                                                         ::

@echo ::      inifile c:\boot.ini                                     ::

@echo ::      读取c:\boot.ini的所有[section]                          ::

@echo ::      inifile c:\boot.ini "[boot loader]"                     ::

@echo ::      读取c:\boot.ini [boot loader]段的内容                   ::

@echo ::      inifile c:\boot.ini "[boot loader]" timeout             ::

@echo ::      显示c:\boot.ini [boot loader]段 timeout的值             ::

@echo ::      inifile c:\boot.ini "[boot loader]" timeout y           ::

@echo ::      设置c:\boot.ini [boot loader]段 timeout为环境变量       ::

@echo ::      返回值:100(文件不存在或未找到)                       ::

@echo ::      返回值:1(查找的Item不存在)                           ::

@echo ::      返回值:0(成功)                                       ::

@echo ::::::::::::2009-11-10::::::::::::::::::::::::::::::::::::::::::::

set succ_code=0

goto :eof


:start

set item_value=

set succ_code=1

::对第一个参数进行判断
if "%~1"=="" (
        call :usage
        goto :exit
)

if "%~1"=="/?" (
        call :usage
        goto :exit
)


SETLOCAL

set setvar=0

if /i "%~4"=="Y" set setvar=1

::初始化变量

set exit_code=

set item=

set filepath=

set section=

set inifile=

if not "%~1"=="" (

        set filepath=%1

) else goto :file_err

if not exist %filepath% goto :file_err

if "%~2"=="" goto :section

set "section=%~2"

set "item=%~3"

if "%item%"=="" set succ_code=0

call :获取数据

endlocal&set "item_value=%item_value%" & set succ_code=%succ_code%

if defined item_value set %item_value%

goto :exit


:获取数据

for /f "usebackq delims=[] skip=2" %%i in (`find /i "%section%" /n %filepath%`) do set 字段开始=%%i

if "%字段开始%"=="" goto :eof

for /f "eol=; usebackq tokens=1,2 skip=%字段开始% delims==;" %%i in (%filepath%) do (

        call :分析数据 "%%i" "%%j"   
                    
        if defined exit_code exit /b %exit_code%&echo exit
)

goto :eof



:分析数据

set a=%~1
set b=%~2

call :trim a
call :trim b

::如果获取到的第一个字符是"[",说明本节已经搜索完成。退出,返回0

if "%a:~0,1%"=="[" (set exit_code=0 & goto :eof )

if not Defined item (
        ::find items in seciton
        echo %a%=%b%

) else (
        ::find appointed item
        if /i "%a%"=="%item%" (
                ::
                set exit_code=0
                ::find the appointed item success
                set succ_code=0

                if "%setvar%"=="1" (
                        ::set environment       
                        set item_value="%a%=%b%"                       

                ) else (
                        ::show item value
                        echo %a%=%b%       

                )       
        )
)

goto :eof


:section

for /f "eol=; usebackq delims=; skip=2" %%i in (`find /i "[" %filepath%`) do echo %%i

set succ_code=0

goto :exit



:trim

if "!%1:~0,1!"==" " (set %1=!%1:~1!&&goto trim)

if "!%1:~0,1!"=="       " (set %1=!%1:~1!&&goto trim)

if "!%1:~-1!"==" " (set %1=!%1:~0,-1!&&goto trim)

if "!%1:~-1!"=="        " (set %1=!%1:~0,-1!&&goto trim)

goto :eof



:file_err

echo %1文件未找到或未输入!

exit /b 100


:exit

exit /b %succ_code%

2009-11-11 10:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: