找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 31219|回复: 7

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

[复制链接]
发表于 2012-5-15 19:05:47 | 显示全部楼层 |阅读模式
配置文件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

所有判断都取了最后一行的值,刚刚学习批处理希望得到大家的指点。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2012-5-15 19:09:11 | 显示全部楼层
实际运行结果
OracleSource
OracleSource
e=OracleSource
cleSource
cleSource
racleSource
 楼主| 发表于 2012-5-15 19:10:27 | 显示全部楼层
没有明白为何所以的值都取了最后一个配置文件的值
发表于 2012-5-16 06:42:36 | 显示全部楼层
set SQLUserName=%bb:~13%
类似这样的需要改成
set SQLUserName=!bb:~13!
 楼主| 发表于 2012-5-16 08:42:53 | 显示全部楼层
已经按你的说法修改了
set SQLUserName=!bb:~13!
可以执行结果还是
OracleSource
OracleSource
e=OracleSource
cleSource
cleSource
racleSource
 楼主| 发表于 2012-5-16 09:01:24 | 显示全部楼层

  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
发表于 2012-5-16 15:45:31 | 显示全部楼层
  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
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2012-5-16 16:04:00 | 显示全部楼层
本帖最后由 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的理解还有很大的问题,今后向大家多学习了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 02:15 , Processed in 0.019930 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表