中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: [分享] 批处理读取INI文件 上一主题 | 下一主题
chenall
银牌会员




积分 1276
发帖 469
注册 2002-12-23
来自 福建泉州
状态 离线
『楼 主』:  [分享] 批处理读取INI文件 使用 LLM 解释/回答一下

:::::::::INI文件读取 by chenall QQ:366840202::::::::::::::::::::::
::使用方法:
:: inifile iniFilePath
::例子:
:: inifile c:\boot.ini
:: 读取c:\boot.ini的所有
:: inifile c:\boot.ini ""
:: 读取c:\boot.ini 段的内容
:: inifile c:\boot.ini "" timeout
:: 显示c:\boot.ini 段 timeout的值
::
::::::::::::::::::::::::::::::::::::::::::::2006-12-18::::::::::::

因自己的需要编写的一个批处理,大家可共同完善.


  1. @echo off
  2. :::::::::INI文件读取 by chenall QQ:366840202::::::::::::::::::::::
  3. ::使用方法: ::
  4. :: inifile iniFilePath ::
  5. ::例子: ::
  6. :: inifile c:\boot.ini ::
  7. :: 读取c:\boot.ini的所有 ::
  8. :: inifile c:\boot.ini "" ::
  9. :: 读取c:\boot.ini 段的内容 ::
  10. :: inifile c:\boot.ini "" timeout ::
  11. :: 显示c:\boot.ini 段 timeout的值 ::
  12. ::07-04-26 新增设置变量的功能,只需将下面的setvar=0改为1即可 ::
  13. ::09-11-05 重写并优化部份代码,修正不能正确设置变量的BUG ::
  14. :: 100:文件不存在或未找到 ::
  15. ::::::::::::::::::::::::::::::::::::::::::::2006-12-21::::::::::::
  16. SETLOCAL
  17. set setvar=1
  18. ::当有指定参娄并且setvar值为1时就将的值设为变量
  19. ::例子inifile c:\boot.ini "" timeout 就可以得到一个%timeout%的变量

  20. ::初始化变量
  21. set exit_code=
  22. set item=
  23. set item_value=inifile=没有找到指定项目!
  24. set filepath=
  25. set section=
  26. set inifile=
  27. if not "%~1"=="" (
  28. set filepath=%1
  29. ) else goto :file_err
  30. if not exist %filepath% goto :file_err
  31. if "%~2"=="" goto :section
  32. set "section=%~2"
  33. set "item=%~3"
  34. call :开始
  35. endlocal&if defined item set %item_value%
  36. goto :eof

  37. :开始
  38. for /f "usebackq delims= skip=2" %%i in (`find /i "%section%" /n %filepath%`) do set 字段开始=%%i
  39. if "%字段开始%"=="" goto :eof
  40. for /f "eol=; usebackq tokens=1* skip=%字段开始% delims==" %%i in (`type %filepath%`) do (
  41. call :分析数据 "%%i" "%%j"
  42. ::强制退出,并返回一个退出代码
  43. if defined exit_code exit /b %exit_code%
  44. )
  45. goto :eof

  46. :分析数据
  47. set "a=%~1"
  48. setlocal EnableDelayedExpansion
  49. call :trim a
  50. endlocal & set "a=%a%"
  51. ::如果获取到的第一个字符是"
  52. if "%a:~0,1%"=="" (set exit_code=0&goto :eof)
  53. ::分析数据,因为INI文件一般“;”以后是注释符,这里去掉注释。
  54. for /f "delims=;" %%x in ("%a%=%~2") do (
  55. if not DEFINED item (echo %%x) else (
  56. if /i "%a%"=="%item%" (
  57. set exit_code=0
  58. if "%setvar%"=="1" (
  59. set "item_value=%%x"
  60. ) else (
  61. echo %%x
  62. )
  63. )
  64. )
  65. )
  66. goto :eof

  67. :section
  68. for /f "eol=; usebackq delims== skip=2" %%i in (`find /i "" %filepath%`) do echo %%i
  69. goto :eof

  70. :trim
  71. if "!%1:~0,1!"==" " (set %1=!%1:~1!&&goto trim)
  72. if "!%1:~0,1!"==" " (set %1=!%1:~1!&&goto trim)
  73. if "!%1:~-1!"==" " (set %1=!%1:~0,-1!&&goto trim)
  74. if "!%1:~-1!"==" " (set %1=!%1:~0,-1!&&goto trim)
  75. goto :eof

  76. :file_err
  77. echo.
  78. echo %1文件未找到或未输入!
  79. echo.
  80. exit /b 100
  81. goto :eof
chenall 发表于: 2009-11-06 19:17


Last edited by chenall on 2009-11-6 at 19:44 ]


   此帖被 +17 点积分       点击查看详情   
评分人:【 electronixtar 分数: +11  时间:2007-3-14 02:40
评分人:【 yangzhiyi 分数: +2  时间:2007-3-17 08:11
评分人:【 0401 分数: +4  时间:2007-3-17 09:27


附件 1: inifile.rar (2007-4-26 11:54, 1012 bytes, 下载附件所需积分 1 点 ,下载次数: 237)


QQ:366840202
http://chenall.net
2006-12-19 01:49
查看资料  发送邮件  访问主页  发短消息  网志  OICQ (366840202)  编辑帖子
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

  建议 chenall 兄把附件里的内容以代码的形式张贴在顶楼,以方便大家直接就帖子内容进行讨论,也方便你对代码进行更新。




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-12-19 01:54
查看资料  发短消息  网志   编辑帖子
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下

测试有问题,提示命令语法不正确.


2006-12-19 02:01
查看资料  发送邮件  发短消息  网志   编辑帖子
chenall
银牌会员




积分 1276
发帖 469
注册 2002-12-23
来自 福建泉州
状态 离线
『第 4 楼』:   使用 LLM 解释/回答一下

呵呵,目前的处理方法感觉还不是很好,希望有人可以给出一个更好的方法.




QQ:366840202
http://chenall.net
2006-12-19 02:02
查看资料  发送邮件  访问主页  发短消息  网志  OICQ (366840202)  编辑帖子
chenall
银牌会员




积分 1276
发帖 469
注册 2002-12-23
来自 福建泉州
状态 离线
『第 5 楼』:   使用 LLM 解释/回答一下

Originally posted by HUNRYBECKY at 2006-12-19 02:01 AM:
测试有问题,提示命令语法不正确.

请贴出你使用的命令.

未加参数运行也会有这个提示.等下再改了
有可能是没有加"的原因.
建议加的参数都用""
例子:
inifile "c:\boot.ini" "" "timeout"

一楼的代码已经更新,附件未更新,可根据一楼的代码修改一下.
if not exist %1 goto :file_err
移动到下一行改为
if not exist %filepath% goto :file_err

Last edited by chenall on 2006-12-19 at 02:08 AM ]




QQ:366840202
http://chenall.net
2006-12-19 02:03
查看资料  发送邮件  访问主页  发短消息  网志  OICQ (366840202)  编辑帖子
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 6 楼』:   使用 LLM 解释/回答一下

  对 boot.ini 的格式和含义不甚了解,chenall 兄能否帖一个极度BT的示范例子出来,要求里面要出现尽可能多的特殊情况:比如特殊字符啦、比如空行啦、比如光标定位在某行的末尾而不是定位在最后一个空行上啦……只有把最BT的情形都考虑到了,做出来的代码才具备最大的兼容性。




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-12-19 02:11
查看资料  发短消息  网志   编辑帖子
chenall
银牌会员




积分 1276
发帖 469
注册 2002-12-23
来自 福建泉州
状态 离线
『第 7 楼』:   使用 LLM 解释/回答一下

对于像这种格式的
[xxxx]
aaabbbddd ;aaaaaaaaa
cccccccccc ;aaaaaaaaaa
;后面的内容是不读取的.因为;后是注释.
可以试试系统中的INF文件.我目前还没有遇到问题
因为我这个是用来读取INF文件中的信息的.
例子中使用BOOT.INI是为了简单.




QQ:366840202
http://chenall.net
2006-12-19 02:16
查看资料  发送邮件  访问主页  发短消息  网志  OICQ (366840202)  编辑帖子
oumigaiiii
新手上路





积分 14
发帖 6
注册 2007-3-13
状态 离线
『第 8 楼』:   使用 LLM 解释/回答一下

双击没反应,一闪过去了,该怎么用啊?晕


2007-3-13 12:10
查看资料  发送邮件  发短消息  网志   编辑帖子
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 9 楼』:   使用 LLM 解释/回答一下

Originally posted by oumigaiiii at 2007-3-12 23:10:
双击没反应,一闪过去了,该怎么用啊?晕



  看看楼主前面写的使用方法!


2007-3-13 12:26
查看资料  发送邮件  发短消息  网志   编辑帖子
oumigaiiii
新手上路





积分 14
发帖 6
注册 2007-3-13
状态 离线
『第 10 楼』:   使用 LLM 解释/回答一下

Originally posted by lxmxn at 2007-3-12 11:26 PM:



  看看楼主前面写的使用方法!


我看了,那个例子那几行,在哪输???怎么调用??


2007-3-13 13:10
查看资料  发送邮件  发短消息  网志   编辑帖子
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 11 楼』:   使用 LLM 解释/回答一下

Originally posted by oumigaiiii at 2007-3-13 00:10:
我看了,那个例子那几行,在哪输???怎么调用??


  在命令提示符CMD和批处理文件中调用,要带参数运行,比如:"inifile c:\windows\control.ini",批处理文件中可以:"call inifile c:\windows\control.ini"


2007-3-13 13:14
查看资料  发送邮件  发短消息  网志   编辑帖子
axi
中级用户

脚本爱好者


积分 238
发帖 93
注册 2007-3-11
来自 GZ
状态 离线
『第 12 楼』:   使用 LLM 解释/回答一下

研究一下,因为我也需要这样的程序。


2007-3-14 01:05
查看资料  发短消息  网志  OICQ (453623262)  编辑帖子
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 13 楼』:   使用 LLM 解释/回答一下

忘记加分了,补上





C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2007-3-14 02:41
查看资料  发送邮件  发短消息  网志   编辑帖子
yangzhiyi
中级用户





积分 261
发帖 123
注册 2006-6-6
状态 离线
『第 14 楼』:   使用 LLM 解释/回答一下

刚好需要,谢谢


2007-3-14 03:39
查看资料  发短消息  网志   编辑帖子
yangzhiyi
中级用户





积分 261
发帖 123
注册 2006-6-6
状态 离线
『第 15 楼』:   使用 LLM 解释/回答一下

还差一个参数没有啊,应该还有一个功能能读出项目的数值 如
timeout=3
得到 3

现在
inifile c:\boot.ini "[boot loader]" timeout
:: 显示c:\boot.ini [boot loader]段 timeout的值
只能读出成
timeout=3


   此帖被 +1 点积分    点击查看详情   
评分人:【 分数: +1  时间:2009-12-10 12:09


2007-3-17 07:52
查看资料  发短消息  网志   编辑帖子

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


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



论坛跳转: