标题: [文本处理] [已解决]批处理如何读取配置文件内容赋值给变量? [打印本页]
作者: mjh77_77 时间: 2012-5-15 19:05 标题: [已解决]批处理如何读取配置文件内容赋值给变量?
配置文件setup.txt 文件内容如下- [Database]
- SQLUserName=SQLUserName
- SQLPassword=SQLPassword
- SQLSource=SQLSource
- OracleUserName=OracleUserName
- OraclePassword=OraclePassword
- OracleSource=OracleSource
复制代码
配置文件所以配置项目内容,可以输入任意的配置项目
需要替换配置文件指定的字符到批处理的变量中- @echo off &setlocal enabledelayedexpansion
- set SQLUserName=ABC
- set SQLPassword=DEF
- set SQLSource=GHI
- set OracleUserName=JKL
- set OraclePassword=MNO
- set OracleSource=PQR
-
- for /f "tokens=*" %%b in (setup.txt) do (
- set bb=%%b
- if exist !bb:~0,11!=="SQLUserName" (
- set SQLUserName=%bb:~13%
- )
- if exist !bb:~0,11!=="SQLPassword" (
- set SQLPassword=%bb:~13%
- )
- if exist !bb:~0,9!=="SQLSource" (
- set SQLSource=%bb:~11%
- )
- if exist !bb:~0,14!=="OracleUserName" (
- set OracleUserName=%bb:~16%
- )
- if exist !bb:~0,14!=="OraclePassword" (
- set OraclePassword=%bb:~16%
- )
- if exist !bb:~0,12!=="OracleSource" (
- set OracleSource=%bb:~14%
- )
- )
-
- echo %SQLUserName%
- echo %SQLPassword%
- echo %SQLSource%
- echo %OracleUserName%
- echo %OraclePassword%
- echo %OracleSource%
-
- pause
复制代码
脚步目的,当配置文件对应的变量名称和批处理对应的变量名称一致,批处理变量取配置文件的值
期望结果
SQLUserName
SQLPassword
SQLSource
OracleUserName
OraclePassword
OracleSource
实际运行结果
CNEX_NEW
CNEX_NEW
e=CNEX_NEW
X_NEW
X_NEW
NEX_NEW
所有判断都取了最后一行的值,刚刚学习批处理希望得到大家的指点。
作者: mjh77_77 时间: 2012-5-15 19:09
实际运行结果
OracleSource
OracleSource
e=OracleSource
cleSource
cleSource
racleSource
作者: mjh77_77 时间: 2012-5-15 19:10
没有明白为何所以的值都取了最后一个配置文件的值
作者: gawk 时间: 2012-5-16 06:42
set SQLUserName=%bb:~13%
类似这样的需要改成
set SQLUserName=!bb:~13!
作者: mjh77_77 时间: 2012-5-16 08:42
已经按你的说法修改了
set SQLUserName=!bb:~13!
可以执行结果还是
OracleSource
OracleSource
e=OracleSource
cleSource
cleSource
racleSource
作者: mjh77_77 时间: 2012-5-16 09:01
- for /f "tokens=1*" %%b in (setup_temp.txt) do (
- set bb=%%b
- if exist !bb:~0,11!=="SQLUserName" (
- set SQLUserName=!bb:~13!
- echo a
- )
-
- if exist !bb:~0,11!=="SQLPassword" (
- set SQLPassword=%bb:~13%
- echo b
- )
-
- if exist !bb:~0,9!=="SQLSource" (
- set SQLSource=%bb:~11%
- echo c
- )
-
- if exist !bb:~0,14!=="OracleUserName" (
- set OracleUserName=%bb:~16%
- echo d
- )
-
- if exist !bb:~0,14!=="OraclePassword" (
- set OraclePassword=%bb:~16%
- echo e
- )
-
- if exist !bb:~0,12!=="OracleSource" (
- set OracleSource=%bb:~14%
- echo f
- )
- )
复制代码
添加了判断后成功输出的显示
预计输出
a
b
c
d
e
f
而实际输出的结果是
a
a
a
a
a
a
b
c
d
e
f
作者: apang 时间: 2012-5-16 15:45
- @echo off
- set SQLUserName=ABC
- set SQLPassword=DEF
- set SQLSource=GHI
- set OracleUserName=JKL
- set OraclePassword=MNO
- set OracleSource=PQR
-
- for /f "tokens=1,2 delims==" %%b in (setup.txt) do (
- if "%%b"=="SQLUserName" set SQLUserName=%%c
- if "%%b"=="SQLPassword" set SQLPassword=%%c
- if "%%b"=="SQLSource" set SQLSource=%%c
- if "%%b"=="OracleUserName" set OracleUserName=%%c
- if "%%b"=="OraclePassword" set OraclePassword=%%c
- if "%%b"=="OracleSource" set OracleSource=%%c
- )
-
- echo %SQLUserName%
- echo %SQLPassword%
- echo %SQLSource%
- echo %OracleUserName%
- echo %OraclePassword%
- echo %OracleSource%
-
- pause
复制代码
作者: mjh77_77 时间: 2012-5-16 16:04
本帖最后由 mjh77_77 于 2012-5-16 16:06 编辑
经测试apang提供的脚本可以达到我的预期,非常感谢。
我自己用临时文件也写了一个,可以达到同样的目的,就是代码太繁琐了。复制代码
配置文件Setup.ini ,实际就是txt的文本文件,代码过滤了#行,用于配置文件注释用。
非常感谢大家的帮助,看来我对for和set的理解还有很大的问题,今后向大家多学习了。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |