read命令读取ini特定节的语法
2025-9-20 452

假设有配置文件内容如下:

[setting]
backround=back.jpg
WaitInst=30
WaitRestart=30

[software]
1 火绒杀毒=%windir%\setup\script\hr.exe /s
0 7zip=%windir%\setup\script\7z.exe /s

 

我用read命令怎么读取software节下的所有内容?帮助太简陋,实例文件看不懂,恳请指教

奖励
收藏
点赞
分享
最新回复 (26)
  • avatar image
    爱心会员VIP会员
    527104427 2025-9-20

    试试这个

    链接:https://share.weiyun.com/lBGJCeUm

    里面也许有源码,我也忘记了

    最后于 2025-10-25 被527104427编辑 ,原因:
    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    dhwc 2025-9-20
    楼主   3

    谢谢,我学习下

  • avatar image
    anson4 2025-9-21
    527104427 试试这个 链接:https://share.weiyun.com/9goFn4mw 密码:jkkvxv 里面也许有源码,我也忘记了

    这种方式,当内容比较多的时候,好像比较慢。

    有没有更高效的方法呢?

    单机计算
  • avatar image
    dhwc 2025-9-22
    楼主   5

    我看了示例文件,并不能弹出正确信息啊?我看了下代码。里面没有指定ini文件路径?

  • avatar image
    dhwc 2025-9-22
    楼主   6

    是不是可以这么理解,read命令并不能直接读取ini的指定节,而是读取所有ini的内容,再对其作处理后得到特定内容?

  • avatar image
    爱心会员VIP会员
    527104427 2025-9-22
    anson4 这种方式,当内容比较多的时候,好像比较慢。 有没有更高效的方法呢?

    也许用正则表达式会快点,不过最近没时间

    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    爱心会员VIP会员
    527104427 2025-9-22
    dhwc 我看了示例文件,并不能弹出正确信息啊?我看了下代码。里面没有指定ini文件路径?

    出错截图看看,不然怎么知道什么问题呢

    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    dhwc 2025-9-22
    楼主   9
    527104427 出错截图看看,不然怎么知道什么问题呢

    啥都没有啊?运行没有任何窗口和消息

  • avatar image
    dhwc 我看了示例文件,并不能弹出正确信息啊?我看了下代码。里面没有指定ini文件路径?

    是示例里的readini代码段吗?按示例命令是可以读取到变量里的,不是弹框

    官方QQ群:872611894(群密码:pecmd.net)
  • avatar image
    dhwc 2025-9-22
    楼主   11

    pecmd也支持0%这样的指代自身的变量吗?我尝试在代码中加入mess来查看但没有成功,明天我再看下

  • avatar image
    dhwc 2025-9-23
    楼主   12

    ENVI^ EnviMode=1
    ENVI^ ForceLocal=1
    SET$ &NL=0d 0a
    READ test.txt,**,&a
    mess %&a%
    ENVI> &a=%&NL%
    ENVI &b=%~2
    ENVI &c=%~3
    mess %&b%

     

    我改了下代码,运行后,变量a能读取到所有内容,而变量b是空值

  • avatar image
    dhwc ENVI^ EnviMode=1ENVI^ ForceLocal=1SET$ &NL=0d 0aREAD test.txt,**,&amess %&a% ...

    传参是不是要在子函数里才能接收?

    官方QQ群:872611894(群密码:pecmd.net)
  • avatar image
    dhwc 2025-9-28
    楼主   14
    caocaofff 传参是不是要在子函数里才能接收?

    你好超版,pecmd的帮助论坛里太分散了,看的头疼。read读取后还要逐行处理,搜了下,发现可以调用函数解决,貌似还更高效。

     

    代码如下:

     

     

    ENVI^ EnviMode=1

    ENVI &IniFile=%&CurDir%\config.ini

    ENVI &Section=database

    ENVI &Key=server

     

    SET$# &Buffer=*256 0

     

    CALL $--ret:&&Ret kernel32.dll,GetPrivateProfileStringW,$%&Section%,$%&Key%,$LALALA,*&&Buffer;,256,$%&IniFile%

     

    ENVI &RetValue=%&Ret%

    FIND $%&RetValue%>0, 

        SET-make &Value=&Buffer;

        MESS. 成功读取:Section=[%&Section%] Key=[%&Key%]@值=[%&Value%]#OK

    }

     

    但是这个读取的是特定键值,如果要读取整个节,,要把GetPrivateProfileStringW的lpkeyname的参数设为NULL,而call命令不支持传递NULL,请问超版有什么好办法?

  • avatar image
    dhwc 你好超版,pecmd的帮助论坛里太分散了,看的头疼。read读取后还要逐行处理,搜了下,发现可以调用函数解决,貌似还更高效。 代码如下: ENVI^ EnviMode=1 ENVI ...

    我是直接用的示例里面的readini代码

    官方QQ群:872611894(群密码:pecmd.net)
  • avatar image
    dhwc 2025-9-29
    楼主   16
    caocaofff 我是直接用的示例里面的readini代码

    谢谢,我再认真学习学习

  • avatar image
    爱心会员VIP会员
    527104427 2025-10-20
    anson4 这种方式,当内容比较多的时候,好像比较慢。 有没有更高效的方法呢?

    https://pecmd.net/thread-1352.htm#13201

     看这里11楼

    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    dhwc 4天前
    楼主   18
    527104427 https://pecmd.net/thread-1352.htm#13201 看这里11楼

    你好超版

     

    如果有变量a内容如下:

    1 火绒杀毒=%windir%\setup\script\hr.exe /s

    0 7zip=%windir%\setup\script\7z.exe /s

    每行均为\n分隔,用read可以读取指定行吗?用forx效率低了点

     

    READ %a%,2,line没用

  • avatar image
    爱心会员VIP会员
    dhwc 你好超版   如果有变量a内容如下: 1 火绒杀毒=%windir%\setup\script\hr.exe /s 0 7zip=%windir%\setup\script\ ...

    READ -*,2,line,a

    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    dhwc 3天前
    楼主   20
    527104427 READ -*,2,line,a

    你好,按你这个试了下,怎么读出来的是全部内容?

    _SUB MainWindow,W350H400,软件列表选择
        SCRN -scrollbar,,W330H350
    
        LABE TitleLabel,L20T20W300H30,请选择要安装的软件:
        
        ENVI &YPos=50
        ENVI &Index=0
        ENVI &inList=0
        ENVI &AllList=
    
        READ list.ini,*,&&AllContent
        //MESS 文件内容:%&AllContent%
        
        FORX *NL &AllContent,&&line,
        {
            mstr * &line1=1,1,&line
            find $%&line1%=[,
            {
                find $%&line%=[softlist], ENVI &inList=1!ENVI &inList=0
            }!
            {
                IFEX $%&inList%=1, 
                {
                    FIND $%&line%=!, CONTINUE
    
                    MSTR * -delims:| &SoftName,&SoftPath,&SoftStatus=<1><2><3>&line
                     
                    CHEK Checkbox_%&Index%,L40T%&YPos%W250H20,%&SoftName%
                    IFEX $%&SoftStatus%=0,ENVI @Checkbox_%&Index%.Check=1
                    IFEX $%&SoftStatus%=2,team ENVI @Checkbox_%&Index%.Check=1|ENVI @Checkbox_%&Index%.Enable=0
                    
                    ENVI &Checkbox_Name=Checkbox_%&Index%
                    ENVI &Checkbox_Name_Path=%&SoftPath%
                    ENVI Checkbox_Name_Status=%&SoftStatus%
    
                    CALC &YPos=%&YPos% + 25
                    CALC &Index=%&Index% + 1
                    
                    ENVI &AllList=%&Checkbox_Name_Path%\n%&AllList%
                }
    
            }
        }
    
        ENVI &TotalCount=%&Index%
    
        ITEM OKButton,L125T300W100H30,确定,CALL OnOK
    _END
    
    _SUB OnOK
    ENVI &InstPath=
    ENVI &Index=0
        
        LOOP $%&Index% <= %&TotalCount%, 
        {
            READ  -*,&Index,&InstPath,&AllList 
    
            ^ENVI a=%Checkbox_%&Index%.Check%
    
            Find $%a%=1,mess Checkbox_%&Index%选中\n%&InstPath%          
            CALC &Index=%&Index% + 1
        }
    _END
    
    // 显示窗口
    CALL @MainWindow

     

    我想用read根据&index变量直接读取指定行内容

    READ  -*,&Index,&InstPath,&AllList 

     

    求教,谢谢

  • avatar image
    爱心会员VIP会员
    dhwc 你好,按你这个试了下,怎么读出来的是全部内容? _SUB MainWindow,W350H400,软件列表选择 SCRN -scrollbar,,W330H350 LABE ...

    %&Index%

    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    dhwc 3天前
    楼主   22
    527104427 %&Index%

    我记得加了%号也还是这样

     

    刚确定了,加了百分号还是这样

    最后于 3天前 被dhwc编辑 ,原因:
  • avatar image
    爱心会员VIP会员
    dhwc 我记得加了%号也还是这样 &nbsp; 刚确定了,加了百分号还是这样

    这就不清楚了,我是按说明书给你的命令。你这个要具体问题具体分析,我看得脑子都乱了。

    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    爱心会员VIP会员
    此楼层已删除
    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    爱心会员VIP会员
    dhwc 我记得加了%号也还是这样 &nbsp; 刚确定了,加了百分号还是这样

    我突然明白你的问题出在哪了,\n在PECMD中仅仅是一个字符串,并不能作为换行符使用。

    按下面改一下应该就好了。

    SET$ NL=0D 0A

    CALL @MainWindow

    ENVI &AllList=%&Checkbox_Name_Path%%NL%%&AllList%

     

    https://www.123pan.com/s/NflRVv-Cm5Sh
返回