Board logo

标题: [文本处理] [已解决]批处理如何读取配置文件内容赋值给变量? [打印本页]

作者: mjh77_77    时间: 2012-5-15 19:05     标题: [已解决]批处理如何读取配置文件内容赋值给变量?

配置文件setup.txt 文件内容如下
  1. [Database]
  2. SQLUserName=SQLUserName
  3. SQLPassword=SQLPassword
  4. SQLSource=SQLSource
  5. OracleUserName=OracleUserName
  6. OraclePassword=OraclePassword
  7. OracleSource=OracleSource
复制代码
配置文件所以配置项目内容,可以输入任意的配置项目
需要替换配置文件指定的字符到批处理的变量中
  1. @echo off &setlocal enabledelayedexpansion
  2. set SQLUserName=ABC
  3. set SQLPassword=DEF
  4. set SQLSource=GHI
  5. set OracleUserName=JKL
  6. set OraclePassword=MNO
  7. set OracleSource=PQR
  8. for /f  "tokens=*" %%b in (setup.txt) do (
  9. set bb=%%b
  10. if exist !bb:~0,11!=="SQLUserName" (
  11. set SQLUserName=%bb:~13%
  12. )
  13. if exist !bb:~0,11!=="SQLPassword" (
  14. set SQLPassword=%bb:~13%
  15. )
  16. if exist !bb:~0,9!=="SQLSource" (
  17. set SQLSource=%bb:~11%
  18. )
  19. if exist !bb:~0,14!=="OracleUserName" (
  20. set OracleUserName=%bb:~16%
  21. )
  22. if exist !bb:~0,14!=="OraclePassword" (
  23. set OraclePassword=%bb:~16%
  24. )
  25. if exist !bb:~0,12!=="OracleSource" (
  26. set OracleSource=%bb:~14%
  27. )
  28. )
  29. echo %SQLUserName%
  30. echo %SQLPassword%
  31. echo %SQLSource%
  32. echo %OracleUserName%
  33. echo %OraclePassword%
  34. echo %OracleSource%
  35. 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

  1. for /f  "tokens=1*" %%b in (setup_temp.txt) do (
  2. set bb=%%b
  3. if exist !bb:~0,11!=="SQLUserName" (
  4. set SQLUserName=!bb:~13!
  5. echo a
  6. )
  7. if exist !bb:~0,11!=="SQLPassword" (
  8. set SQLPassword=%bb:~13%
  9. echo b
  10. )
  11. if exist !bb:~0,9!=="SQLSource" (
  12. set SQLSource=%bb:~11%
  13. echo c
  14. )
  15. if exist !bb:~0,14!=="OracleUserName" (
  16. set OracleUserName=%bb:~16%
  17. echo d
  18. )
  19. if exist !bb:~0,14!=="OraclePassword" (
  20. set OraclePassword=%bb:~16%
  21. echo e
  22. )
  23. if exist !bb:~0,12!=="OracleSource" (
  24. set OracleSource=%bb:~14%
  25. echo f
  26. )
  27. )
复制代码
添加了判断后成功输出的显示
预计输出
a
b
c
d
e
f
而实际输出的结果是
a
a
a
a
a
a
b
c
d
e
f
作者: apang    时间: 2012-5-16 15:45

  1. @echo off
  2. set SQLUserName=ABC
  3. set SQLPassword=DEF
  4. set SQLSource=GHI
  5. set OracleUserName=JKL
  6. set OraclePassword=MNO
  7. set OracleSource=PQR
  8. for /f  "tokens=1,2 delims==" %%b in (setup.txt) do (
  9.    if "%%b"=="SQLUserName" set SQLUserName=%%c
  10.    if "%%b"=="SQLPassword" set SQLPassword=%%c
  11.    if "%%b"=="SQLSource" set SQLSource=%%c
  12.    if "%%b"=="OracleUserName" set OracleUserName=%%c
  13.    if "%%b"=="OraclePassword" set OraclePassword=%%c
  14.    if "%%b"=="OracleSource" set OracleSource=%%c
  15. )
  16. echo %SQLUserName%
  17. echo %SQLPassword%
  18. echo %SQLSource%
  19. echo %OracleUserName%
  20. echo %OraclePassword%
  21. echo %OracleSource%
  22. pause
复制代码

作者: mjh77_77    时间: 2012-5-16 16:04

本帖最后由 mjh77_77 于 2012-5-16 16:06 编辑

经测试apang提供的脚本可以达到我的预期,非常感谢。
我自己用临时文件也写了一个,可以达到同样的目的,就是代码太繁琐了。
  1. @echo off &setlocal enabledelayedexpansion
  2. set SQLUserName=ABC
  3. set SQLPassword=DEF
  4. set SQLSource=GHI
  5. set OracleUserName=JKL
  6. set OraclePassword=MNO
  7. set OracleSource=PQR
  8. if exist Setup.ini (
  9. findstr . "Setup.ini">>"Setup_tmp.txt"
  10. for /f "delims=" %%b in (Setup_tmp.txt) do (
  11. call,set t=%%b
  12. call,echo %%t: =%%>>setup.txt
  13. )
  14. del Setup_tmp.txt
  15. if exist setup.txt (
  16. for /f  "eol=# delims== tokens=1,2" %%i in (setup.txt) do (
  17. set ii=%%i
  18. set jj=%%j
  19. echo !jj!>>!ii!.txt
  20. echo !ii!>>delete.txt
  21. )
  22. )
  23. if exist SQLUserName.txt (
  24. for /f   %%i in (SQLUserName.txt) do (
  25. set ii=%%i
  26. if exist SQLUserName.txt (
  27. set SQLUserName=!ii!
  28. )
  29. )
  30. )
  31. if exist SQLPassword.txt (
  32. for /f   %%i in (SQLPassword.txt) do (
  33. set ii=%%i
  34. if exist SQLPassword.txt (
  35. set SQLPassword=!ii!
  36. )
  37. )
  38. )
  39. if exist SQLSource.txt (
  40. for /f  %%i in (SQLSource.txt) do (
  41. set ii=%%i
  42. if exist SQLSource.txt (
  43. set SQLSource=!ii!
  44. )
  45. )
  46. )
  47. if exist OracleUserName.txt (
  48. for /f   %%i in (OracleUserName.txt) do (
  49. set ii=%%i
  50. if exist OracleUserName.txt (
  51. set OracleUserName=!ii!
  52. )
  53. )
  54. )
  55. if exist OraclePassword.txt (
  56. for /f   %%i in (OraclePassword.txt) do (
  57. set ii=%%i
  58. if exist OraclePassword.txt (
  59. set OraclePassword=!ii!
  60. )
  61. )
  62. )
  63. if exist OracleSource.txt (
  64. for /f   %%i in (OracleSource.txt) do (
  65. set ii=%%i
  66. if exist OracleSource.txt (
  67. set OracleSource=!ii!
  68. )
  69. )
  70. )
  71. if exist delete.txt (
  72. for /f  %%i in (delete.txt) do (
  73. del %%i.txt
  74. )
  75. )
  76. del delete.txt
  77. )
  78. )
  79. del setup.txt
  80. )
  81. echo %SQLUserName%
  82. echo %SQLPassword%
  83. echo %SQLSource%
  84. echo %OracleUserName%
  85. echo %OraclePassword%
  86. echo %OracleSource%
  87. pause
复制代码
配置文件Setup.ini ,实际就是txt的文本文件,代码过滤了#行,用于配置文件注释用。
非常感谢大家的帮助,看来我对for和set的理解还有很大的问题,今后向大家多学习了。




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2