假设有配置文件内容如下:
[setting]backround=back.jpgWaitInst=30WaitRestart=30
[software]1 火绒杀毒=%windir%\setup\script\hr.exe /s0 7zip=%windir%\setup\script\7z.exe /s
我用read命令怎么读取software节下的所有内容?帮助太简陋,实例文件看不懂,恳请指教
试试这个
链接:https://share.weiyun.com/lBGJCeUm
里面也许有源码,我也忘记了
谢谢,我学习下
527104427 试试这个 链接:https://share.weiyun.com/9goFn4mw 密码:jkkvxv 里面也许有源码,我也忘记了
这种方式,当内容比较多的时候,好像比较慢。
有没有更高效的方法呢?
我看了示例文件,并不能弹出正确信息啊?我看了下代码。里面没有指定ini文件路径?
是不是可以这么理解,read命令并不能直接读取ini的指定节,而是读取所有ini的内容,再对其作处理后得到特定内容?
anson4 这种方式,当内容比较多的时候,好像比较慢。 有没有更高效的方法呢?
也许用正则表达式会快点,不过最近没时间
dhwc 我看了示例文件,并不能弹出正确信息啊?我看了下代码。里面没有指定ini文件路径?
出错截图看看,不然怎么知道什么问题呢
527104427 出错截图看看,不然怎么知道什么问题呢
啥都没有啊?运行没有任何窗口和消息
是示例里的readini代码段吗?按示例命令是可以读取到变量里的,不是弹框
pecmd也支持0%这样的指代自身的变量吗?我尝试在代码中加入mess来查看但没有成功,明天我再看下
ENVI^ EnviMode=1ENVI^ ForceLocal=1SET$ &NL=0d 0aREAD test.txt,**,&amess %&a%ENVI> &a=%&NL%ENVI &b=%~2ENVI &c=%~3mess %&b%
我改了下代码,运行后,变量a能读取到所有内容,而变量b是空值
dhwc ENVI^ EnviMode=1ENVI^ ForceLocal=1SET$ &NL=0d 0aREAD test.txt,**,&amess %&a% ...
传参是不是要在子函数里才能接收?
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,请问超版有什么好办法?
dhwc 你好超版,pecmd的帮助论坛里太分散了,看的头疼。read读取后还要逐行处理,搜了下,发现可以调用函数解决,貌似还更高效。 代码如下: ENVI^ EnviMode=1 ENVI ...
我是直接用的示例里面的readini代码
caocaofff 我是直接用的示例里面的readini代码
谢谢,我再认真学习学习
https://pecmd.net/thread-1352.htm#13201
看这里11楼
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没用
dhwc 你好超版 如果有变量a内容如下: 1 火绒杀毒=%windir%\setup\script\hr.exe /s 0 7zip=%windir%\setup\script\ ...
READ -*,2,line,a
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
求教,谢谢
dhwc 你好,按你这个试了下,怎么读出来的是全部内容? _SUB MainWindow,W350H400,软件列表选择 SCRN -scrollbar,,W330H350 LABE ...
%&Index%
527104427 %&Index%
我记得加了%号也还是这样
刚确定了,加了百分号还是这样
dhwc 我记得加了%号也还是这样 刚确定了,加了百分号还是这样
这就不清楚了,我是按说明书给你的命令。你这个要具体问题具体分析,我看得脑子都乱了。
我突然明白你的问题出在哪了,\n在PECMD中仅仅是一个字符串,并不能作为换行符使用。
按下面改一下应该就好了。
SET$ NL=0D 0A
CALL @MainWindow
ENVI &AllList=%&Checkbox_Name_Path%%NL%%&AllList%